网站做排名教程,官方网站首页,一级ip的二级ip,河南互助网站建设__new__:用来生成骨架 __init__:骨架添加血肉
【一】类中的__new__
class MyClass(object):def __init__(self,name,age):print(f给当前MyClass类的对象初始化属性的时候会触发__init__)self.name nameself.age age
def __call__(self,*args,**kwargs):pri… __new__:用来生成骨架 __init__:骨架添加血肉
【一】类中的__new__
class MyClass(object):def __init__(self,name,age):print(f给当前MyClass类的对象初始化属性的时候会触发__init__)self.name nameself.age age
def __call__(self,*args,**kwargs):print(f当前 MyClass 类的对象被调用的时候会触发 __call__)return f当前 MyClass 类 的 __call__ 的返回值 : {self.name}
# 【三】画骨架有骨架才能上色def __new__(cls, *args, **kwargs):print(f给当前 MyClass 类的对象创建骨架的时候会触发 __new__)# 当前类本身print(f MyClass 类 的 __call__ 的 cls : {cls})# class __main__.MyClass
# 当前类初始化传的位置参数print(f MyClass 类 的 __call__ 的 args : {args})# (knight,)
# 当前类初始化传的关键字参数print(f MyClass 类 的 __call__ 的 args : {kwargs})# {age: 18}
# 【四】调用父类的object的new帮我搭骨架将当前生成的骨架返回obj object.__new__(cls)# 查看当前返回值发现是一个对象类型print(fobj:{obj}) # __main__.MyClass object at 0x0000024E61B16830# 查看名称空间发现是空的print(fobj.__dict__:{obj.__dict__}) # {}# 【五】调用自己的__init__方法 初始化属性obj.__init__(*args, **kwargs)# 【六】给自己的名称空间初始化属性print(fobj.__dict__:{obj.__dict__}) # {name: knight, age: 18}# 返回生成的骨架return obj
# MyClass 相当于给你一张纸
# 【一】类() 调用 --- 一定会触发 __init__ 初始化对象的属性 # __init__ 给你人体骨架上个色
# 【二】在调用 __init__ 之前要调用 __new__ # __new__ 相当于将你人体的骨架搭建好
m MyClass(knight,age18)
print(m.name) # knight
【二】元类中的__new__
class MyType(type):def __init__(cls,class_name,class_bases,class_name_space):super().__init__(class_name,class_bases,class_name_space)
def __call__(self, *args, **kwargs):# 得到一个空的对象obj super().__call__(*args,**kwargs)return obj
# # 【三】画骨架有骨架才能上色def __new__(cls, *args, **kwargs):print(f给当前 MyType 类的对象创建骨架的时候会触发 __new__)# 给当前 MyType 类的对象创建骨架的时候会触发 __new__
# 当前类本身print(f MyType 类 的 __call__ 的 cls : {cls})# class __main__.MyType
# 当前类初始化传的位置参数print(f MyType 类 的 __call__ 的 args : {args})# (knight,)
# 当前类初始化传的关键字参数print(f MyType 类 的 __call__ 的 args : {kwargs})# {age: 18}
# 【四】寻求父类来帮助搭建骨架obj type.__new__(cls, *args, **kwargs)print(fobj:{obj}) # class __main__.MyClassprint(fobj.__dict__:{obj.__dict__})# obj.__dict__:{__module__: __main__, __init__: function MyClass.__init__ at 0x000001A0B7C32170, __call__: function MyClass.__call__ at 0x000001A0B7C32200, __dict__: attribute __dict__ of MyClass objects, __weakref__: attribute __weakref__ of MyClass objects, __doc__: None}return obj
class MyClass(metaclassMyType):def __init__(self,name,age):print(f给当前MyClass类的对象初始化属性的时候会触发__init__)self.name nameself.age age
def __call__(self,*args,**kwargs):print(f当前 MyClass 类的对象被调用的时候会触发 __call__)return f当前 MyClass 类 的 __call__ 的返回值 : {self.name}
m MyClass(knight,age18)
print(m.name) # knight