我不确定您是否可以通过以上标题理解此问题。不用担心。这是对我的问题的解释。
我几乎没有类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
实现此目标的任何建议/想法
答案 0 :(得分:2)
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
变量来修改my_dict_ref
。在您的代码中,您已经实现了这一点,但是您两次调用了process()
的{{1}}函数,因此从不调用print语句。 :)
RuleA
应为:
rule_a_obj.process() # should print 61