我不确定你能不能用上面的标题理解这个问题。别担心。这是对我的问题的解释。
我有几个Field
类的对象,也有几个规则对象,每个规则来自不同的类,比如RuleA,RuleB,RuleC,...
我希望将每个所有字段对象发送到每个规则对象。如果一条规则修改了字段对象属性,则应反映在所有其他规则中
class Field:
a = 2
b = 3
# and few more attributes
field_count = 10 #let say i have 10 fields
fields = [Field() for i in range(field_count)]
class RuleA:
def __init__(self, fields):
self.fields = fields
def process(self):
self.fields[2].a = 61
class RuleB:
def __init__(self.fields):
self.fields = fields
def process(self):
print(self.fields[2].a)
..... other rules .....
rule_a_obj = RuleA(fields)
rule_b_obj = RuleB(fields)
..... other rules initialization .....
rule_a_obj.process()
rule_b_obj.process() # should print 61
为实现这一目标有什么建议/想法吗?
发布于 2018-07-07 03:27:30
python中的名称是指存储值的位置,而不是值本身(除了数字之类的基本类型)。因此,当您进行赋值时,您复制的是对相关对象的引用,而不是对象本身的完全深度克隆。
这一点很容易从以下几个方面看出:
my_dict = {'x': 1, 'y': 2}
my_dict_ref = my_dict
my_dict_ref['z'] = 3
print(my_dict) # {'y': 2, 'x': 1, 'z': 3}
因此,我们能够通过my_dict_ref
变量修改my_dict
。在您的代码中,您已经做到了这一点,但是您调用了两次RuleA
的process()
函数,所以您的打印语句永远不会被调用。:)
rule_a_obj.process() # should print 61
应为:
rule_b_obj.process() # should print 61
https://stackoverflow.com/questions/51216523
复制相似问题