繁体   English   中英

在Python中初始化嵌套类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM