假设我要创建一个“房屋”类,该类具有自己的某些属性,但还具有一个(嵌套的)“居民”类,该类具有一些属性并具有强制性的“姓”。房屋实例可能存在,但没有任何居民。如何创建它,以便我最终可以执行以下操作?
myhouse = House()
residentX = myhouse.resident('Smith')
目前,我将其设置为嵌套类,但是在尝试初始化myhouse时遇到麻烦,因为此时嵌套嵌套Resident类需要一个姓氏(此时我不一定要有姓)< / p>
class House:
def __init__(self):
self.someattribute = <someattribute>
self.resident = self.Resident()
class Resident:
def __init__(self, surname):
self.surname = surname
我知道我可以重组代码以不使用嵌套类,然后在代码中将任何居民明确地绑定到房屋。但是,我想在此处使用点号(myhouse.resident)将居民自动绑定到房屋。
此外,我了解到python中的嵌套类有些皱眉-我愿意就如何以更pythonic的方式进行上述操作提出建议。
答案 0 :(得分:3)
我将打破Resident
类,并为.resident
使用一个属性/设置器
赞:
class House:
def __init__(self):
self.someattribute = <someattribute>
self._resident = None
@property
def resident(self):
return self._resident
@resident.setter
def resident(self, surname):
r = Resident(surname)
self._resident = r
class Resident:
def __init__(self, surname):
self.surname = surname
但是,如果您希望.resident
可以打电话但又想跟踪房屋的居民,则仍然可以突破Resident
类,并使用:
class House:
def __init__(self):
self.someattribute = <someattribute>
self.residents = []
def resident(self, surname):
'''
Add a resident to the house
'''
r = Resident(surname)
self.residents.append(r)
return r
class Resident:
def __init__(self, surname):
self.surname = surname