我已经研究过这个链接:http://infohost.nmt.edu/tcc/help/pubs/python/web/new-new-method.html
但即使我严格遵守这些指令,代码中也有一些东西困扰着我:
错误\u manager.py:
class error_manager:
def __new__(cls):
cls._error = 0
cls._er_string = "None"
return cls
数据库.py:
from error_manager import error_manager as EM
class Database(EM):
def __new__(cls, table_name="", database_name=""):
inst = EM.__new__(cls) #THIS LINE
return inst
def __init__(self, table_name="", database_name=""):
print("init dtb")
self.table_name = table_name
self.database_name = database_name
def __str__(self):
return self.table_name + " " + self.database_name
def __repr__(self):
return self.table_name + " " + self.database_name
跑步:
dtb = Database("tbl", "dtb")
print(dtb)
这将输出:
<class '__main__.Database'>
为什么它不从子类调用\uuu str\uu或\uu repr\uu方法
另外,在第#行中,它说“参数太多,方法调用的位置参数太多。但是如果我删除参数,脚本就不会运行。我该怎么办
您是从
errormanger.__new__
返回类本身,而不是该类的实例__new__
应该看起来像尽管如此,重写
__init__
而不是__new__
会更简单,除非有其他未显示的工作需要重写__new__
相关问题 更多 >
编程相关推荐