Lição 83 do Python - Pesquisa de atributos avançada

O conteúdo deste artigo é original do autor, se você precisar reimprimir, indique a fonte: https://www.cnblogs.com/xuexianqi/p/12708369.html

Um: O princípio da pesquisa de atributos: objeto ==> classe ==> classe pai

Lembre-se: a classe pai não é uma metaclasse

Lembre-se: a classe pai não é uma metaclasse

Lembre-se: a classe pai não é uma metaclasse

Dois: exemplos

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 obj

class Bar(object):
    # n=333

    # def __new__(cls, *args, **kwargs):
    #     print('Bar.__new__')
    pass

class Foo(Bar):
    # n=222

    # def __new__(cls, *args, **kwargs):
    #     print('Foo.__new__')
    pass

class 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)

Acho que você gosta

Origin www.cnblogs.com/xuexianqi/p/12708369.html
Recomendado
Clasificación