#!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # python内置方法 class A: n = "A" def f2(self): print("from A") class B(A): n = "B" def f1(self): print("from B") # def f2(self): # print("f2 from B") class C(A): n = "C" def f2(self): print("from C") class D(B,C): # def __new__(cls, *args, **kwargs):#初始化类中所有构造方法,如果这样重写了那么就只会执行重写的这个方法,需要再调用类中的其它方法就会报错 # print("--new--") def __init__(self): print("__init__") self.n = 4 def __call__(self, *args, **kwargs): print("__call__") '''test doc''' # def __del__(self):#在程序运行完后会在内存中自动销毁 # print("deleteing the ....") pass #1、继承类的优先级 # d = D() # d.f1() # d.f2()#按照先去找B,没有的话再去找C,C没有的话再去找A。按照广度优先的原则 #在老版本中经典类按照深度优先,新式类按照广度优先,但是在3.0后无论经典类还是新式类全都按照广度优先,因此上图虽然是经典类但是还是广度优先 #2、类中的内置方法 # d = D() # print(d.__doc__) #打印出类中的字符串,可以用来注释 # print(d.__module__)#打印模块所在的文件的名字 #obj = D() #执行__init__ #obj() #执行__call__ #print(obj.__new__):#初始化类中所有构造方法,如果这样重写了那么就只会执行重写的这个方法,需要再调用类中的其它方法就会报错 #print(obj.__dict__)#将类的成员变量以字典的形式打印出来,不会打印实例变量 #metaclasses 比new都还要底层的类,如果重写类就用到,基本不会用到 #3、类的构造 类是由type构造的 # wohaoshuai = type("wohaoshuai",(),{"test":123}) # print(type(wohaoshuai)) #<class 'type'> # a = wohaoshuai() # print(a.test) #123