如何使用Python创建继承的对象?

时间:2015-08-13 08:03:28

标签: python oop

我有以下嵌套字典:

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对象中获取continentcity名称。< / p>

在Python中这样做的最佳方式是什么?

2 个答案:

答案 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(实体 - 关系图),以帮助您设计数据模型。

:)