首页 > 解决方案 > 获取父类

问题描述

我想创建嵌套类。我以位于一个州的城市为例,该州本身属于一个国家。我想从我的 Country 类中添加州,或者从我的 State 类中添加 Cities 等......所以我制作了以下代码:

from typing import Dict


class City:

    def __init__(self, **kwargs):
        self.name = kwargs['name']
        self.inhabitants = {}

    def add_inhabitant(self, name: str, age: int) -> None:
        kwargs = {'name': name, 'age': age}
        self.inhabitants[name] = kwargs

    def get_inhabitant(self, name: str) -> Dict:
        return self.inhabitants[name]


class State:

    def __init__(self, **kwargs):
        self.name = kwargs['name']
        self.cities = {}

    def add_city(self, name: str) -> None:
        kwargs = {'name': name}
        self.cities[name] = City(**kwargs)

    def get_city(self, name: str) -> City:
        return self.cities[name]


class Country:

    def __init__(self, name):
        self.name = name
        self.states = {}

    def add_state(self, name: str) -> None:
        kwargs = {'name': name}
        self.states[name] = State(**kwargs)

    def get_state(self, name: str) -> State:
        return self.states[name]

因此,我可以从我的 Country 类中获得一个州,然后从我的 State 类中获得一个城市,等等......它工作得很好

usa = Country('USA')

usa.add_state('Texas')
texas = usa.get_state('Texas')

texas.add_city('Houston')
houston = texas.get_city('Houston')

houston.add_inhabitant('Jason', 43)
houston.add_inhabitant('Elon', 38)

print(houston.__dict__)

我现在希望从一个城市获得它所在的州以及它所属的国家。我怎样才能做到这一点?

理想情况下,我想要这样的东西:

houston.get_state()
houston.get_country()

标签: pythonpython-3.xclass

解决方案


在每个子项中添加对父项的引用。

class City:

    def __init__(self, **kwargs):
        self.name = kwargs['name']
        self.state = kwargs['state']
        self.inhabitants = {}

    def add_inhabitant(self, name: str, age: int) -> None:
        kwargs = {'name': name, 'age': age}
        self.inhabitants[name] = kwargs

    def get_inhabitant(self, name: str) -> Dict:
        return self.inhabitants[name]


class State:

    def __init__(self, **kwargs):
        self.name = kwargs['name']
        self.country = kwargs['country']
        self.cities = {}

    def add_city(self, name: str) -> None:
        kwargs = {'name': name, 'state': self}
        self.cities[name] = City(**kwargs)

    def get_city(self, name: str) -> City:
        return self.cities[name]

class Country:

    def __init__(self, name):
        self.name = name
        self.states = {}

    def add_state(self, name: str) -> None:
        kwargs = {'name': name, 'country': self}
        self.states[name] = State(**kwargs)

    def get_state(self, name: str) -> State:
        return self.states[name]

推荐阅读