人类的起源-类是从哪里来的-一脸懵逼

本文深入探讨Python中一切皆对象的概念,详细解释了如何使用type动态创建类,并介绍了__new__与__init__的区别及应用场景。此外还展示了带有参数的类创建方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

转载于:https://www.cnblogs.com/momo8238/p/7266132.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值