我有两个类,它们在一对多关系中相互引用(Kid
和Toy
在下面的示例中)。当我将一个新的Toy
分配给Kid
时,我希望Kid
也被分配给Toy
基于列表为toys
属性创建一个自定义类和重新定义方法(例如append
、extend
、delete
)会很管用,但我想知道是否有更好的方法
class Toy:
def __init__(self, name, kid=None):
self.name = name
self.kid = kid
class Kid:
def __init__(self, name, toys):
self.name = name
self.toys = toys
@property
def toys(self):
return self._toys
@toys.setter
def toys(self, val):
self._toys = val
# Assign the kid to the toys
for toy in self._toys:
toy.kid = self
if __name__ == "__main__":
toys = [Toy('Woodie'), Toy('Slinky'), Toy('Rex')]
andy = Kid('Andy', toys)
# Andy corrected assigned to toys
for toy in andy.toys:
print('{}\t{}'.format(toy.name, toy.kid.name))
print('-')
# Add new toy
andy.toys.append(Toy('Buzz'))
# Throws error because Buzz is not assigned Andy
for toy in andy.toys:
print('{}\t{}'.format(toy.name, toy.kid.name))
输出:
Woodie Andy
Slinky Andy
Rex Andy
-
Woodie Andy
Slinky Andy
Rex Andy
Traceback (most recent call last):
File "c:/Users/jonat/Desktop/tests/inheritance_q.py", line 34, in <module>
print('{}\t{}'.format(toy.name, toy.kid.name))
AttributeError: 'NoneType' object has no attribute 'name'
我想Buzz
被分配Andy
你可以在Kid类中添加一个方法:
输出:
相关问题 更多 >
编程相关推荐