在Python中向多个类传递对象引用

2024-09-30 22:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道你是否能理解这个问题与上述标题。别担心。这是对我问题的解释。在

我有一些Field类的对象,和一些rules对象[来自不同类的每个规则都说RuleA、RuleB、RuleC。。。]在

我想把每个allfields对象发送到每个rule对象。如果一个规则修改了字段对象属性,它应该反映在所有其他规则中

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

对此有什么建议/想法吗


Tags: 对象selfobjfieldfields规则defcount
1条回答
网友
1楼 · 发布于 2024-09-30 22:22:07

python中的名称是指存储值的位置,而不是值本身(除了基本类型,如数字)。所以当你做一个赋值时,你复制的是一个对象的引用,而不是对象本身的完全深层克隆。在

这很容易从以下几个方面看出:

^{1}$

所以我们可以通过my_dict_ref变量修改my_dict。在您的代码中,您已经实现了这一点,但是您调用了process()函数两次,因此不会调用print语句。:)

^{pr2}$

应改为:

rule_b_obj.process() # should print 61

相关问题 更多 >