如何从方法中创建类的新实例?

时间:2019-04-21 07:06:21

标签: python class

我扩展了字典类以创建自己的字典类,现在我需要一个方法来创建该类的新空白实例,并使用所需的值对其进行初始化。我面临的问题是,新的实例对象不是新的对象,而只是对该类self实例的引用。

这是我讨论过的课程:

VALUES = "VALUES"
OPERATORS = "OPERATORS"

class MyDict(dict):
    def __init__(self, operators: dict = {}, values: dict = {}) -> None:
        super().__init__()
        self.set_operators_values(operators, values)

    def set_operators_values(self, operators: dict = {}, values: dict = {}):
        if not operators.keys() == values.keys():
            raise Exception("Keys of operators and values must be the same!!!")

        self[OPERATORS]: dict[str, str] = operators
        self[VALUES]: dict[str, int] = values

当我调用以下方法时,会发生奇怪的事情:

def extend(self, properties: dict, data_set: DataFrame):
    column_types: dict = data_set.dtypes.to_dict()
    extended = MyDict()
    print("BLANK Extended MyDict:")
    print(extended)
    #  ...
    return extended

这里extended对象是指self实例。 如何避免这种情况,而是使用该对象的方法从其类中创建空白新实例?由于我还需要来自self对象的一些数据,因此我想避免创建一个@staticmethod。 有什么办法吗?

1 个答案:

答案 0 :(得分:1)

问题来自初始化,实例是一个新实例,但是它们引用的是相同的dict的运算符和值字典,这将解决该问题:

class MyDict(dict):
    def __init__(self, operators: dict = None, values: dict = None) -> None:
        operators = operators or {}
        values = values or {}
        super().__init__()
        self.set_operators_values(operators, values)

这与这个著名的question

有关