1、继承
super()
多继承 近似广度优先 C3算法
2、私有属性、私有方法
在self.age的age、def breath的age和breath前多加俩下划线,外部访问不了,在class实例中可以访问得到
3、访问私有方法与属性
a._Dog__sh() #Dog是类名
4、抛出异常
raise 异常类型(“内容”) #可提醒子类重写父类方法
5、类方法
@classmethod 装饰,把self本身变成类本身
不能访问实例变量,只能访问类变量(定义时没有self的,非实例,写在def外面的属于类的变量)
6、类属性修改
7、静态方法
@staticmethod装饰,不能访问类变量,也不能访问实例变量,隔断了它与类和实例的任何关系;名义上只是放在类下;函数输入变量self变成了输入变量,不再指代实例
8、属性方法property
把一个方法变成一个静态的属性,例如执行类方法不用加(self)了
调用方式上是变量,但是外界还是不能修改的;
若还是想修改,则 方法名.setter
9、反射
hasattr(obj,name) #用字符串形式判断对象有没有该属性或方法
getattr(obj,name)#获取
setattr(obj,name,new) #赋值
delattr #删除
class Dog:
def walk(self):
print("我硕化")
dog = Dog()
youwantofind = input(">>").strip()
if hasattr(dog,youwantofind):
func = getattr(dog,youwantofind)
print(func())
setattr
def sh(self):
print("111")
dog = Dog()
setattr(dog,"sh",sh)#若是dog换成Dog,则下一行不需要传入实例
dog.sh(dog)#注意这里,有点像静态方法staticmethod
10、反射的妙用 #以菜单界面为例
想想之前面向过程的编法…
11、双下划线方法
(1) len
只要len一个对象就会触发
(2)hash 方法同
(3)eq
判断a1==a2时触发
(4)item系列
只要执行对应的就会触发
12、str & repr
13、析构方法
del
程序被释放的时候执行
14、__new__方法,在__init__前执行
#实现单例化
15、call
实例名+括号或者类名+括号的时候执行,例如s=School(),s()或School()()的时候执行
16、动态创建一个类 type
17、isinstance(0bj,cls)
判断obj是否为该类
18、assert断言
19.module__和__class
查看当前操作对象在哪个模块与哪个类