print("hello 元类")
"""
定义: python中所有类都继承 object类
传统的类是由谁来创建的?
答案:是通过type来创建的
一、传统类的创建:如下
participant 用户调用
participant __new__
participant __init__
用户调用->>__new__: Dog("旺财")
__new__->>父类__new__: 创建实例
父类__new__-->>__new__: 返回实例
__new__->>__init__: 传递参数
__init__->>实例对象: 初始化属性
"""
class Dog():
"""
TODO new函数是静态函数,创建对象 必须有返回,否则init对象不会执行
TODO 参数1 cls代表类本身
TODO 参数2 *args 接收所有位置参数
TODO 参数3 **kwargs 接收所有关键字参数
"""
def __new__(cls,*args,**kwargs):
print(" 执行了Dog的new函数 创建对象")
return super().__new__(cls)
"""
TODO init初始化函数
TODO 参数1 self 代表实例对象
TODO 参数N... 执行Dog(..需要传递的参数)
"""
def __init__(self,name):
self.name=name
print("执行了Dog的init函数 初始化对象")
d = Dog("旺财")
print(d)
print(d.name)
"""
__new__函数__init__对比
| 特性 | __new__ | __init__ |
|-----------------|----------------------------------|-----------------------------|
| **方法类型** | 静态方法(隐式,需手动声明 `cls`) | 实例方法(自动传递 `self`) |
| **执行顺序** | 先执行(创建实例) | 后执行(初始化实例) |
| **返回值** | 必须返回实例对象 | 无返回值 |
| **主要用途** | 控制对象创建逻辑 | 初始化对象属性 |
| **参数结构** | `cls, *args, **kwargs` | `self, *args, **kwargs` |
"""