如何从一个单独的类python中的方法操作类中的属性

时间:2016-11-18 06:13:59

标签: python

假设我有以下内容:

class A: 

  def __init__( self, Att):
    """here Att is a string input"""
    self.Att = Att

  def __repr__( self ):
    s = "My attribute is " + self.Att 
    return s

class B: 

  def __init__( self, Btt):
    """here Btt is a string input"""
    self.Btt = Btt

  def __repr__( self ):
    s = "My other attribute is " + self.Btt 
    return s

  def SetEqual(self):
    Att = self.Btt 

我意识到上面的SetEqual方法不起作用。但是,如何在class B中创建一个方法来访问class A并将self.Att的值更改为等于self.Btt

1 个答案:

答案 0 :(得分:0)

B中的以下方法获取A个对象并更改其值:

def setEqual(self, a):
    a.Att = self.Btt

这里有两条评论。

首先,Python不了解封装,因此从a.Att类的外部编写A绝对合法(和Pythonic)。

其次,请注意赋值,因为它只链接两个变量。作为一个明显的后果,一旦您撰写a = bab共享相同的id

当操作整数等不可变对象时,这不是问题,因为如果两个变量引用相同的id但是一个被修改,Python将更改其id

>>> a = 1
>>> b = a
>>> id(a) == id(b)
True
>>> b = 2
>>> id(a) == id(b)
False

但是,当您操作集合时,行为是不同的:

>>> l1 = []
>>> l2 = l1
>>> id(l1) == id(l2)
True
>>> l1.append(12)
>>> id(l1) == id(l2)
True

这意味着当你操纵可变对象时,在某处更改其值会使其在其他任何地方都发生变化。

您可能需要查看copy模块的浅层和深层副本。