假设我有以下内容:
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
?
答案 0 :(得分:0)
B
中的以下方法获取A
个对象并更改其值:
def setEqual(self, a):
a.Att = self.Btt
这里有两条评论。
首先,Python不了解封装,因此从a.Att
类的外部编写A
绝对合法(和Pythonic)。
其次,请注意赋值,因为它只链接两个变量。作为一个明显的后果,一旦您撰写a = b
,a
和b
共享相同的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
模块的浅层和深层副本。