父类方法在子类上称为despise声明

时间:2018-06-01 19:54:13

标签: python

我已经查看了这个链接:http://infohost.nmt.edu/tcc/help/pubs/python/web/new-new-method.html

但是,即使很难,我也按照这些说明操作了一些令我困扰的代码:

error_manager.py:

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

database.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'>

为什么它没有从子类中调用__str_或__repr_方法?

另外在#THIS行上它说&#34;方法调用的位置参数太多参数。但是如果我删除了脚本不会运行的参数。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您正在从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"