# 面向对象

定义一个类 Animals:

  1. 数据成员
    • 名称
    • 种类
    • 年龄
    • 性别
    • 状态
  2. 构造函数

代码实现:

from functools import singledispatch
class Animals:
    specie = ""
    geander = ""
    def __init__(self):
        self.name = Cat.name
    
    def toWalk(self):
        self.status = 1
        print(self.name+": 要散步")
    def toEat(self):
        self.status = 2
        print(self.name+": 要食物")
    def toDrink(self):
        self.status = 3
        print(self.name+": 要喝水")
class Cat(Animals):
    # 成员变量
    name = ""
    specie = ""
    age = 0
    status = 0
    def __init__(self, name, specie, age):
        self.name = name
        self.specie = specie
        self.age = age
    def miaomiaomiao(self):
        print("大橘: 喵喵喵")
    def setWeight(self, weight):
        self.weight = weight
    
    @singledispatch
    def Eat(self, obj):
        print(self.name+": 想吃"+obj)
    @Eat.register(int)
    def Eat(self, obj):
        print(self.name+": 要吃 "+str(obj)+" 个")
cat = Cat('大橘', '中华田园', 1)
cat.toEat()
cat.toDrink()
cat.miaomiaomiao()
cat.setWeight(100)
print(cat.name+str(cat.weight)+" kg 重")
cat.Eat("小鱼干")
cat.Eat(99999)
  1. 通过 @staticmethod 装饰器即可把其装饰的方法变为一个静态方法.
    什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过 self. 调用实例变量或类变量.
    但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法.

  2. 类方法通过 @classmethod 装饰器实现,类方法和普通方法的区别是,类方法只能访问类变量,不能访问实例变量.

  3. 属性方法的作用就是通过 @property 把一个方法变成一个静态属性,调用时与调用属性的方式相同.

    • 把一个方法变成静态属性的作用:
      当某个属性的值是一系列动作后才得到的结果.
      当每次调用时,其实它都要经过一系列的动作才返回结果的,但这些动作过程不需要用户关心,用户只关心得到这个属性的值即可,也就是说用户只需要调用这个属性就可以了.
    1. 修改属性值
      将由 @proerty 装饰器(把一个方法变成一个静态属性)使用 @proerty.setter 装饰器再装饰一下,此时 你需要写一个新方法(同名), 对这个属性值进行更改.

    2. 删除属性

    • 将由 @proerty 装饰器(把一个方法变成一个静态属性)使用 @proerty.deleter 装饰器再装饰一下,此时 你需要写一个新方法(同名).
    • 使用 del 删除该实例所对应的属性方法(属性) 例如: del 对象.属性

# python JSON

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。
json.dumps 用于将 python 对象编码成 JSON 字符串。

import json
data = [ { 'b' : 2, 'd' : 4, 'a' : 1, 'c' : 3, 'e' : 5 } ]
json = json.dumps(data)
print(json)

为了提高可读性,dumps 方法提供了一些可选的参数。
sort_keys=True 表示按照字典排序 (a 到 z) 输出。
indent 参数,代表缩进的位数
separators 参数的作用是去掉,和 : 后面的空格,传输过程中数据越精简越好

import json
data = [ { 'b' : 2, 'd' : 4, 'a' : 1, 'c' : 3, 'e' : 5 } ]
json = json.dumps(data, sort_keys=True, indent=4,separators=(',', ':'))

json.loads 用于解码 JSON 数据。该函数返回 python 字段的数据类型。

import json
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
text = json.loads(jsonData)  #将 string 转换为 dict
print(text)