Поскольку каждый штат ведет себя так же, как и любой другой штат, и каждый город ведет себя так же, как и любой другой город, единственное реальное отличие - это данные, уникальные для каждого города или штата (названия, почтовые индексы).
Вы можете создать один класс, который принимает аргументы, которые определяют уникальные для состояния вещи, такие как имя и аббревиатура. Города могут быть атрибутом состояния, которые добавляются до, после или во время создания государства.
Например:
new_york = State("New York", "NY")
new_york.add_city("Albany", zips=[12084, 12201, 12202, 12203, 12204])
new_york.add_city("Bronx", [0453, 10457, 10460, 10451, 10474])
или это:
albany = City("Albany", zips=[12084, 12201, 12202, 12203, 12204])
bronx = City("Bronx", zips=[0453, 10457, 10460, 10451, 10474])
new_york = State("New York", "NY", cities=[albany, bronx])
или объедините их с этим:
new_york = State("New York", "NY", cities = [
City("Albany", zips=[12084, 12201, 12202, 12203, 12204]),
City("Bronx", zips=[0453, 10457, 10460, 10451, 10474]),
])
Затем вы можете добавить свои методы случайного выбора общим способом, потому что они просто должны извлечь из self.zips
для города или self.cities
для штата. Или вы можете выполнять итерации по каждому штату и / или по каждому городу в этом штате. Это все довольно просто и зависит только от того, что вам нужно сделать.
Суть в том, чтобы создать универсальные классы штата и / или города и универсальные методы, которые выбирают из уникальных данных для каждого экземпляра.