首页 > 解决方案 > 如何从 pyhton 中的 __init__ 方法传递值,因为它不返回任何值

问题描述

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

bob = Person1('bob', 25)

__init__不返回任何东西,那么在分配属性和空对象后,属性名称和年龄的值如何从__init__函数传递给变量?bobnameageself

标签: pythonconstructorinitialization

解决方案


bob = Person1('bob', 25)真的相当于

rv = Person1.__new__(Person1, 'bob', 25)
if isinstance(rv, Person1):
    rv.__init__('bob', 25)
bob = rv

调用类不会立即调用__init__方法。首先调用类的__new__方法以实际创建新实例,如果 __new__返回作为第一个参数传递的类的实例, __init__在返回值之前调用。


更进一步,这一切都封装在 中type.__call__,所以真正的调用Person1('bob', 25)类似于

bob = type.__call__(Person1, 'bob', 25)  # Person1 is an instance of type

wheretype.__call__是调用Person1.__new__and,如果合适的话Person.__init__,并返回结果对象以将其分配给bob


推荐阅读