再看属性查找
再看属性查找
结合python继承的实现原理+元类重新看属性的查找应该是什么样子呢???
属性查找的原则:对象-》类-》父类
切记:父类 不是 元类
在学习完元类后,其实我们用class自定义的类也全都是对象(包括object类本身也是元类type的 一个实例,可以用type(object)查看),
我们学习过继承的实现原理,如果把类当成对象去看,将下述继承应该说成是:对象StanfordTeacher继承对象Foo,对象Foo继承对象Bar,对象Bar继承对象object
class Mymeta(type): n=444 def __call__(self, *args, **kwargs): #self=<class ‘__main__.StanfordTeacher‘> obj=self.__new__(self) # StanfordTeacher.__new__ # obj=object.__new__(self) print(self.__new__ is object.__new__) #True self.__init__(obj,*args,**kwargs) return objclass Bar(object): # n=333 # def __new__(cls, *args, **kwargs): # print(‘Bar.__new__‘) passclass Foo(Bar): # n=222 # def __new__(cls, *args, **kwargs): # print(‘Foo.__new__‘) passclass StanfordTeacher(Foo,metaclass=Mymeta): # n=111 def __init__(self,name,age): self.name=name self.age=age### obj=StanfordTeacher(‘lili‘,18)# print(obj.__dict__)# print(obj.n)print(StanfordTeacher.n)
于是属性查找应该分成两层,一层是对象层(基于c3算法的MRO)的查找,另外一个层则是类层(即元类层)的查找对象发起的属性查找:找到object 停止查找类发起的属性查找:object没找到会继续寻找元类
相关推荐
koushr 2020-11-12
jimeshui 2020-11-13
faiculty 2020-08-20
数据与算法之美 2020-07-04
xhao 2020-06-29
wuxiaosi0 2020-06-28
路漫 2020-06-28
数据与算法之美 2020-06-28
田有朋 2020-06-28
xhao 2020-06-28
natloc 2020-06-27
leoaran 2020-06-22
算法改变人生 2020-06-09
nurvnurv 2020-06-07
shenwenjie 2020-06-04
Tips 2020-06-03
只能做防骑 2020-06-01
yuanran0 2020-05-13