面向对象
| 类与对象 |
定义类:
class 类名:
def 方法1(self):
pass
def 方法2(self):
pass
根据类创建对象(创建一个类的实例) 使用对象去执行类中的方法
'self' 形式参数,代指执行方法的对象
封装:
class Foo:
def __init__(self, name, age) # 构造方法
self.name = name # 在创建对象时为对象设置数据
self.age = age
obj = 类名() # 创建一个类的实例
obj.name2 = 'zyu' # 在obj中封闭一条数据
继承:
1 class Dog(Animals) # Dog 继承Animals 的所有就去 2 pass # Dog 派生类(子类) Animals 基类(父类) 3 4 5 class Dog(Animals, Unles) 6 pass # python中可以继承多个父类,如果有方法相同,优先找自己的 7 # 父类的优先级从左到右
多态:
python就是多态的,显式检查数据类型就会破坏多态.
运行父类的构造方法:
1. super(当前类,self).__init__()
2. 父类.__init__(self,XXX)
静态字段:
将每个对象中都存在的字段放到类中,开始位置
通过类名访问
静态方法:
不需要使用对象封闭的字段,可定义要静态方法:
class Foo: @staticmethod # 装饰静态方法 def xxoo(): pass
类方法:
和静态方法相同,但其必须有一个为类名的参数(系统自动传递)
class Foo: @classmethod # 装饰类方法 def xxoo(cls): # 自动将类名传递给 cls print('xxoo', cls)
普通特性
将类中普通方法伪造成字段可以访问字段的方式去访问
注,获取时不能对其传参数, 需要设置其值时再建一个同名方法其可接收一个参数
class Foo: @property def xxoo(self): # 获取特性 return 52 @xxoo.aetter def xxoo(self, value) # 设置字段,value 接收值 print(value) @xxoo.deleter # 删除特性 def xxoo(self) print('deleter') Foo.xxoo # 返回特性 Foo.xxoo = 'xx' # 设置特性 del Foo.xxoo # 删除特性
类的成员总结:
字段: 普通字段, 静态字段
方法: 普通方法, 静态方法(@staticmethod), 类方法(@classmethod)
特性: 普通特性(获取无法传参 @property) (设置可传参 @函数名.setter) (删除特性 @函数名.deleter)
快速判断: 有self的用对象访问,无self的用类访问
通过类访问的有: 静态字段, 静态方法, 类方法
通过对象访问的: 普通方法, 普通字段, 普通特性
类中特殊方法
1 def __init__(self): # Foo() 类实例化对象时自动调用(构造方法) 2 pass 3 4 5 def __del__(self): # 注销对象时调用(析构方法) 6 pass 7 8 9 def __call__(self): # obj()或 Foo()() 对象加括号时自动调用 10 pass 11 12 13 def __getitem__(self, item): # r['a'] d[1:3] __getslice__(2.7) 14 pass # 对象加[]时自动调用 15 16 17 def __setitem__(self, key, value): # r['k1'] = 'ab' 赋值 18 pass # 对象加[]并赋值时自动调用 19 20 21 def __delitem__(self, key): # del r['k1'] 执行del时自动调用 22 pass 23 24 25 def __iter__(self): # 对可迭代对象迭代时自动执行(其是生成器) 26 pass 27 28 29 def __str__(self): # 对象被打印或执行str(obj)时自动调用 30 pass 31 32 33 def __dict__(self): # 类的描述信息,通过类调用返回类的所有成员 34 pass 35 36 from lib.aa import C 37 obj = C() 38 print obj.__module__ # 表示当前操作的对象在那个模块, 输出 lib.aa,即:输出模块 39 print obj.__class__ # 表示当前操作的对象的类是什么, 输出 lib.aa.C,即:输出类
浙公网安备 33010602011771号