python - 继承类在python 3.x中如何使用bass类的__new__函数?
问题描述
在 Python 3.x 中,继承类使用__new__
函数还是它自己的函数?在下面的代码中,有两个__new__
函数,如何调用它们?
class A:
def __new__(cls):
print("A",cls)
return super().__new__(cls)
class B(A):
def __new__(cls):
print(cls)
return super().__new__(cls)
a = A()
print("-----------")
b = B()
输出 :
A <class '__main__.A'>
-----------
<class '__main__.B'>
A <class '__main__.B'>
解决方案
您的代码应该略有不同。首先,由于 A 不继承任何类,因此编写 没有意义super().__new__(cls)
。Super()
返回直接父类。其次,Python 中的“this”参数通常称为self
.
无论如何,你确定你的意思是__new__
而不是__init__
?看看这里的区别。
class A:
def __new__(self):
print("A",self)
return super().__new__(self)
class B(A):
def __new__(self):
print(self)
return super().__new__(self)
a = A()
print("-----------")
b = B()
让我们看看输出:
A <class '__main__.A'>
-----------
<class '__main__.B'>
A <class '__main__.B'>
创建 A 时,只调用 A 的构造函数。创建 B 时,首先打印类 B 的标志,然后调用 A 的构造函数(使用super()
函数)。
推荐阅读
- dask - 每个工人有多少个 dask 工作
- python - 使 Numpy 操作向量化
- python - 将每个结果分组为单独的列 pandas python
- python - Pygame TikTacToe 玩家获胜问题如何解决?
- python - 优化 pymongo 中 insert_many() 和 create_index 的性能
- git - 您可以通过另一台 PC 访问 git 远程吗
- kendo-ui - Shom 图像悬停在 Kendo UI 网格单元内的 imageurl 上
- pandas - 通过 pd.to_datetime 和 datetime.strptime() 将日期时间字符串更改为日期时间有什么区别
- c# - 在 C# 中通过 Npgsql 调用函数后未向表中添加新行
- python - 调试 SIGSEGV Java 运行时致命错误(Python 上的 PySpark)