被调用的父类方法轻视子类的声明

2024-06-16 08:28:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经研究过这个链接: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方法

另外,在第#行中,它说“参数太多,方法调用的位置参数太多。但是如果我删除参数,脚本就不会运行。我该怎么办


Tags: nameselfnewreturndeftablemanagererror
1条回答
网友
1楼 · 发布于 2024-06-16 08:28:16

您是从errormanger.__new__返回类本身,而不是该类的实例__new__应该看起来像

class error_manager:
    def __new__(cls):
        inst = object.__new__(cls)
        inst._error = 0
        inst._er_string = "None"
        return inst

尽管如此,重写__init__而不是__new__会更简单,除非有其他未显示的工作需要重写__new__

class error_manager:
    def __init__(self):
        self._error = 0
        self._er_string = "None"

相关问题 更多 >