人类的起源-类是从哪里来的-一脸懵逼
1. python中一切皆对象(实例),运行结果说明:f 是由Foo创建而来的实例;Foo 是由type创建而来的实例
class Foo(object): def __init__(self,name): self.name=name f=Foo("Lily") print(type(f)) print(type(Foo))
运行结果:
<class '__main__.Foo'> <class 'type'>
2. 创建类的另外一种方法:
def func(self): print("hello Lily") Foo=type('Foo',(),{'talk':func}) #这里的func,指的是它的内存地址 f=Foo() f.talk() print(type(Foo))
运行结果:
hello Lily <class 'type'>
3.含有参数的情况:
def func(self): print("hello Lily") def __init__(self,name,age): self.name=name self.age=age Foo=type('Foo',(object,),{'talk':func,"__init__":__init__}) f=Foo("Lily",29) f.talk()
运行结果:
hello Lily <class 'type'>
4 metaclass--类是怎么创建的.
1) 在实例化的时候,__new__也会执行,而且会先于__init__执行。
2)通过__new__ 函数调用__init__, 实际上是通过__new__来实例化的。实例化的时候是通过__new__ 来触发__init__的。
__new__是用来创建实例的。已经封装到类里了。可用于在实例化之前定制一些功能。
class Foo(object): #metaclass = MyType def __init__(self,name): self.name = name print("Foo __init__") def __new__(cls, *args, **kwargs): #相当于重构了new方法,阻断了父类new方法的执行,所以必须要再继承一次父类的new方法 print("Foo __new__",cls, *args, **kwargs) return object.__new__(cls) #去继承父类的__new__方法 f = Foo("Alex") print(f.name)
运行结果:
Foo __new__ <class '__main__.Foo'> Alex Foo __init__ Alex