来自变量的Python类信息

时间:2017-03-31 19:33:40

标签: python class

在以下代码中:

class species:
    def __init__(self, continent):
        self.continent=continent

giraffe = species("africa")

animal = "giraffe"

编辑:动物是一个字符串

我可以从var“animal”中检索“非洲”吗?

2 个答案:

答案 0 :(得分:0)

是。 animalgiraffe都是引用到同一个底层对象。非常喜欢" Jala015"和#J; Jala Smith"和妈妈" (或者爸爸?)可能都是对同一个人的引用。

同样,如果你通过其中一个引用更改对象的continent,那么通过另一个引用可以看到该更改,因为它们都指向同一个地方。 / p>

<强>更新

现在你说动物不是对象的引用,而是字符串。有几种方法可以做到这一点,所有这些方法都有些复杂。

首先,如果giraffe是全局的(如您的代码所示,那么它),那么它将在globals()字典中。你可以这样做:

giraffe = species('Africa')
animal = "giraffe"

continent = globals()[animal].continent

如果长颈鹿不是全球性的,而是功能中的局部变量,那么它就不会起作用。您可以使用locals()来获取它,但即便如此也是如此。在这种情况下,一般来说,你应该把这些东西放在你自己的字典中进行查找:

Zoo = {}  # empty dictionary

giraffe = species('Africa')

Zoo['giraffe'] = giraffe

animal = "giraffe"

continent = Zoo[animal].continent

您可以通过将物种名称存储在Animal类中来实现这一点,因此:

class Animal:
    def __init__(self, name, where):
        self.name = name
        self.continent = where

然后你可以将你的对象放入deque,dict,list,set,tuple或者你喜欢的任何其他东西,并且仍然通过强力匹配它们:

Zoo = [ Animal('giraffe', 'Africa'), Animal('zebra', 'Africa'), Animal('Cheeto-Stained Ferret-Wearing Shitgibbon', 'North America') ]

pet = None

for animal in Zoo:
    if animal.name == 'giraffe':
        pet = animal
        break

答案 1 :(得分:-1)

访问属性

animal.continent