基础知识
1 | class humanbeing(object): |
根据上述代码,我们做以下总结:
- init 中定义了实例所必须具有的属性
- class A(object)括号中为该类的父类
- 通过a = A()的方式声明一个实例,同时必须要传入 init 声明的属性
- 你可以通过a.xixi = ‘x’ 的方式给该对象添加属性,然后通过del a.xixi的方式删除掉它
- name前面用 修饰的属性名为私有的,无法从外部进行访问。
- love 是类变量,跟 name不一样, name是实例变量,专属于一个实例
- 父类和子类都拥有同一个方法,调用时会调用子类的方法。
- animal类并不是humanbeing的子类,但是拥有跟humanbeing类一样的方法,所以同样可以传入printInfo方法中,并输出结果。这是由于python的鸭子类型,意思就是你不必的确是鸭子,只要你的行为看起来是鸭子,你就可以是一只鸭子。
- isinstance(a, A)可以判断a是否是类A的实例
- type(a)用于输出a的类型
- getattr/setattr/hasattr 用于直接对a的属性进行操作
- dir(a) 可以输出一个实例所有的属性及相关的操作,用在类上也是一样的,dir(A),会输出类A所有的属性及具有的操作。
更多内容
动态地添加属性/方法
1 | class A(object): |
slots
上面看到,对于对象a,我们可以通过a.xixixi来添加一个属性,但是我们如果不想让这样的事情发生呢?不允许增加新的属性。
针对上面的代码,我们需要这样写:
1 | class humanbeing(object): |
通过上面的方式,除了等式右边切片内的属性,将无法给实例添加任何属性。
property
1 | class A(object): |
通过@property 和 @name.setter让属性name成为了可读且可修改的属性,而age属性仅为可读属性。通过这个方式,我们可以像调用属性一样调用方法。
多重继承
1 | class electronics(object): |
按照上面的操作即可实现多重继承,这种设计通常称之为MixIn
str
类似于Java的toString