代码之家  ›  专栏  ›  技术社区  ›  GerryDevine

在python中初始化嵌套类

  •  0
  • GerryDevine  · 技术社区  · 6 年前

    假设我想创建一个类“house”,它有自己的一些属性,但也有一个(嵌套的?)。resident'类,具有一些属性,并且具有强制属性'surname'。一个房屋实例可能存在,但没有任何居民。如何创建这个以便我最终可以执行以下操作?

    myhouse = House()
    residentX = myhouse.resident('Smith')
    

    目前,我将它设置为嵌套类,但是当我尝试初始化myhouse时会遇到麻烦,因为此时嵌套的常驻类需要姓氏(此时我不一定有姓氏)。

    class House:
        def __init__(self):
            self.someattribute = <someattribute>
            self.resident = self.Resident()
    
        class Resident:
            def __init__(self, surname):
                self.surname = surname
    

    我知道我可以重新构造代码以不使用嵌套类,然后显式地将任何居民绑定到我的代码中的一所房子。但是,我想在这里使用点符号(myhouse.resident)来自动将一个居民绑定到一个房子。

    另外,我也理解Python中的嵌套类有点不受欢迎——我愿意接受关于如何以更蟒蛇式的方式进行上述操作的建议。

    1 回复  |  直到 6 年前
        1
  •  3
  •   James    6 年前

    我会把 Resident 类并使用属性/setter .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
    

    但是,如果你想的话 居民 为了能打电话,同时也想追踪房子的居民,你仍然可以把 居民 类和用法:

    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