我有以下嵌套字典:
world = {'europe' :
{'france' : ['paris', 'lion'],
'uk' : ['london', 'manchester']}},
{'asia' :
{'china' : ['beijing'],
{'japan' : ['tokyo']}}
我正在尝试以下对象:
class world:
continents = {} # dict of continents
class continent(world):
name = '' # name of the continent
countries = {} # dict of countries
class country(continent):
name = '' # name of the country
cities = [] # list of cities
class city(country):
name = '' # name of the city
目标是从countries
对象中获取所有continent
,然后从country
对象中获取continent
和city
名称。< / p>
在Python中这样做的最佳方式是什么?
答案 0 :(得分:2)
这里继承“更高”的类是不正确的。如果继承了一个类,则继承类 的是父类加上更多。您在这里说country
是continent
而且 是world
。这显然不是真实和不必要的。
这四个类之间没有必要的层次关系。世界是世界,大陆是大陆,国家是国家,城市是城市。对于各大洲而言,它足以包含他们所持有的国家的列表,或相反地,一个国家可以包含它所在的大陆。这些类本身不需要等级关系。
还要考虑这种严格的1:1关系是否有用。有些国家存在于一个以上的大陆上,具体取决于您希望如何定义这些术语(殖民地很有趣)。如何设计这种数据结构实际上取决于你拥有的具体目标。
答案 1 :(得分:1)
从语法上讲,这些类应该定义为
class World(object):
def __init__(self, continents):
self.continents = continents
class Continent(World):
def __init__(self, name):
self.name = '' # name of the continent
...
class Country(Continent):
def __init__(self, name):
self.name = '' # name of the country
...
class City(Country):
def __init__(self, name):
self.name = '' # name of the city
...
然而,在这种情况下它没有任何意义。
子类化意味着别的东西:
Class Animal(object):
pass
Class Dog(Animal):
pass
Class Snake(Animal):
pass
狗是一种特定类型的动物。狗是动物。蛇也是一种动物。
在您的情况下,一个大陆不是一种世界,一个国家不是一种类型的大陆,依此类推。
相反,您希望关联这些类,这些类可以作为单独的类存在,也可以在另一个类中进行。
例如
class City(object):
def __init__(self, name):
self.name = '' # name of the city
class Country(object, cities):
def __init__(self, name, cities):
self.name = name # name of the country
self.cities = cities # it's a list of Cities instances
class Continent(object):
def __init__(self, name, countries):
self.name = name # name of the continent
self.countries = countries # it's a list of Countries instances
class World(object):
def __init__(self, continents):
self.continents = continents # it's a list of Continent instances
france = Country('France', [City('Paris'), City('Annecy'), City('St. Tropez')])
italy = Country('Italy', [City('Rome'), City('Milan')])
uk = Country('UK', [City('London'), City('Bath')])
europe = Continent('europe', [france, italy, uk])
...
注意:上面只是一个例子。由于多种原因,它可能不是在python中执行此操作的最佳方式,具体取决于您打算如何操作对象。
这是一个广泛而漫长的主题。
我建议在网上寻找一个关于面向对象的好教程(也称为面向对象编程的OOP或面向对象设计的OOD)。
Here is one tutorial,但网上有数千个。
之后,您将能够设计对象应公开的接口,以便在本地/应用程序级别提供某种功能。
提示:使用RDBM(关系数据库管理系统)可以帮助您关联和管理模型。了解ERD(实体 - 关系图),以帮助您设计数据模型。
:)