gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:59:41 24 4
gpt4 key购买 nike

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

这是我讨论的类(class):

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 对象。有什么办法可以做到吗?

最佳答案

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

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有关

关于python - 如何从方法中创建类的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55780657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com