如何从列表Python创建类实例

时间:2017-07-07 23:31:44

标签: python string class instance python-2.6

我正在为一个学校项目制作一个程序。它是模拟联合国。

countries = ['Australia', 'Brazil', 'Canada']

class delegate(object):
   def __init__(self, country):
     self.country = country

我有一个国家列表和一个名为delegate的类。因此,每个委托对象必须有一个国家/地区。通常我会这样做:

mexico = delegate('Mexico')

就是这样。但我想循环遍历国家/地区列表并为每个列表创建类实例。我的意思是:

australia = delegate('Australia')
brazil = delegate('Brazil')
canada = delegate('Canada')

等等。 我该怎么做? 非常感谢!!

4 个答案:

答案 0 :(得分:9)

从列表中创建命名变量通常是个坏主意。也许你可以试试

countries = ['Australia', 'Brazil', 'Canada']

class Delegate(object):    # according to PEP8, class names should be title-case
    def __init__(self, country):
        self.country = country

# create a dict
delegates = {country: Delegate(country) for country in countries}

编辑:根据@SethMMorton,Python 2.6不理解字典理解(即我上面使用的)。您可以使用

获得相同的结果
delegates = dict([(country, Delegate(country)) for country in countries])

答案 1 :(得分:1)

[delegate(c) for c in countries]

答案 2 :(得分:-1)

你可以使用exec:

countries=['australia','brazil','canada']
for country in countries:
    exec('%s=delegate(%s.capitalize())'%(country,country)) 

这将创建一个新的委托实例,并将其分配给其正确的国家/地区名称。希望这有帮助。

答案 3 :(得分:-3)

我相信你正在寻找所谓的匿名课程。这意味着您正在创建一个类而不将其分配给变量。例如:

country_delegates = []
for country in countries:
    country_delegates.append(delegate(country))

这将创建一个委托对象列表,每个国家/地区对应一个。如果您想获得属于特定国家/地区的代理人,您可以编写一个搜索该列表并返回正确国家/地区的委托对象的函数。