我扩展了字典类以创建自己的字典类,现在我需要一个方法来创建该类的新空白实例,并使用所需的值对其进行初始化。我面临的问题是,新的实例对象不是新的对象,而只是对该类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
。
有什么办法吗?
答案 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
有关