假设我有两个班。简单的Square
类:
class Square:
def __init__(self, side):
self.side = side
以及稍微复杂一点的MyClass
类:
class MyClass:
def __init__(self, square=None):
if square is None:
self.square = Square()
else:
self.square = square
self.rounded_side = round(self.square.side)
我实例化一个MyClass
对象,如下所示:
myObj = MyClass()
在这种情况下,如何才能达到以下行为?你知道吗
myObj.rounded_side
更改为X
,会自动将myObj.square.side
也更改为X
。你知道吗myObj.square.side
更改为X
,会自动将myObj.rounded_side
更改为round(X)
。你知道吗如果可能,以一种不需要对Square
类进行任何修改的方式(这是我目前面临的问题的简化版本;在原始版本中,我没有Square
的代码访问权限)。你知道吗
到目前为止我尝试的是:
rounded_side
转换为属性。这使得获得行为1成为可能。但是,我没有看到如何将square
也转换为属性,以使获得行为2成为可能。你知道吗MyClass
从Square
继承,这样两个属性的深度都相同,但是这样我就失去了类所需的一些结构(我宁愿用户访问myObj.square.side
,而不是myObj.side
)如果有人感兴趣,我面临的实际问题是:
我正在pygame中编写一个游戏,我的Player
类的位置有一个属性,它是一个带有两个float(2D position)的数组。这是用来确定玩家的位置,并决定如何更新它的位置在下一个更新步骤的游戏的物理。你知道吗
但是,我还希望在Player
类中有一个^{Rect
类使用整数存储矩形的位置(像素坐标)。你知道吗
为了能够将播放器的位置信息存储在一个float中,而且为了方便起见,还使用了Rect
类,我考虑在它们之间建立这种依赖关系,其中改变一个也相应地改变另一个。你知道吗
如前所述,将
rounded_side
设为属性,但让它访问self.square
中的值以获取和设置。你知道吗现在,设置
rounded_side
将使用setter将值设置为square;直接将值设置为square将意味着属性getter将从那里查找它。你知道吗相关问题 更多 >
编程相关推荐