python - 如何通过直接引用类来创建带有 __init__ 的对象?
问题描述
所以我知道实例对象有绑定方法,但你也可以通过访问类来调用函数,因为函数可以是所述类的属性。
__init__
那么我的问题是,当没有创建 self 时,python 如何自动将 self 传递给方法?是否有一些我不熟悉的幕后流程?这似乎是先有鸡先有蛋之类的东西。
我知道其他函数调用确实需要您传递实例化对象,但 init 对我来说似乎很神秘。
解决方案
那么我的问题是,当没有创建 self 时,python 如何自动将 self 传递给init方法?是否有一些我不熟悉的幕后流程?这似乎是先有鸡先有蛋之类的东西。
是的,你是对的。在创建类实例后__init__
调用。不创建类实例,它只是允许“自定义”实例。是实际用于创建新类实例的方法。它接受对类对象的引用,以及传递给所述类对象的任何参数。__init__
__new__
这是__init__
和__new__
方法的文档:
__init__
:
在创建实例之后(由
__new__()
)调用,但在它返回给调用者之前调用。参数是传递给类构造函数表达式的参数。如果基类有__init__()
方法,则派生类的__init__()
方法(如果有)必须显式调用它以确保正确初始化实例的基类部分;例如:super().__init__([args...])
。因为
__new__()
和__init__()
一起构造对象(__new__()
创建对象和自定义对象),所以;__init__()
不能返回非 None 值。__init__()
这样做会导致在运行时引发 TypeError。
__new__
:
调用以创建类cls的新实例。
__new__()
是一个静态方法(特殊情况,因此您不需要这样声明),它将请求实例的类作为其第一个参数。其余参数是传递给对象构造函数表达式(对类的调用)的参数。的返回值__new__()
应该是新的对象实例(通常是cls的实例)。典型的实现通过使用适当的参数调用超类的
__new__()
方法来创建类的新实例super().__new__(cls[, ...])
,然后在返回之前根据需要修改新创建的实例。如果
__new__()
返回cls的实例,则将调用新实例的__init__()
方法__init__(self[, ...])
,其中 self 是新实例,其余参数与传递给 的参数相同__new__()
。如果
__new__()
不返回cls__init__()
的实例,则不会调用新实例的方法。
推荐阅读
- excel - 如何将多个 Word 文件中的表格复制到 Excel 中的单独工作表中,并将工作表命名为 Word doc 的名称?
- c++ - c++:我可以给一个线程一个新值,而它仍在运行还是我必须先结束它?
- java - Gradle 没有在模拟器上构建应用程序
- api - docker-compose 中分离的前端和 php 后端的问题
- python - 如何在运行 PyQt 应用程序时捕获 main 中引发的异常?
- java - 将对象添加到列表
- c++ - 通过简单的动态链接来违反一个定义规则
- python - sqlalchemy.exc.ProgrammingError:(psycopg2.ProgrammingError)无法适应类型“系列”
- bots - 一个意图可以在 wit.ai 上拥有 50 种表达吗?
- matlab - 使用单元测试框架进行数据验证