[英]Initialising nested classes in Python
假设我要创建一个“房屋”类,该类具有自己的某些属性,但还具有一个(嵌套的)“居民”类,该类具有一些属性并具有强制性的“姓氏”。 房屋实例可能存在,但没有任何居民。 如何创建它,以便最终完成以下任务?
myhouse = House()
residentX = myhouse.resident('Smith')
目前,我将其设置为嵌套类,但是在尝试初始化myhouse时遇到了麻烦,因为此时嵌套嵌套Resident类需要一个姓氏(我现在不一定要这样)
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的方式进行上述操作提出建议。
我将打破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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.