【问题标题】:Trouble calling instance variables in Python在 Python 中调用实例变量时遇到问题
【发布时间】:2012-05-19 04:36:55
【问题描述】:

我现在才刚刚开始学习如何上课,但遇到了一些我不明白的事情。假设我有一堂课……

class Area(object):
    def __init__(self, name, items):
        self.name = name
        self.items = items

现在,如果我以这种方式启动 Area 的实例:

impala = Area("Impala", ["shotgun", "salt"])

然后调用一个变量,比如:

print impala.items

它工作得很好。但是,如果我尝试以这种方式启动它:

class impala(Area):
    def __init__(self):
        self.name = "Impala"
        self.items = ["shotgun", "salt"]

然后尝试做同样的事情它给了我一个错误:“type object 'impala' has no attribute 'items'”

谁能告诉我在第二个例子中我做错了什么以及为什么会发生?

【问题讨论】:

  • class impala(Area) 不会创建 Area 的实例。它定义了Area 的一个子类,称为impala
  • 啊啊啊啊,现在说得通了!谢谢你:)
  • 您永远不会创建第二类的实例。也许我误解了您的问题,但您似乎将继承与实例化混淆了。

标签: python class object python-2.7 instance-variables


【解决方案1】:

您的类和变量使用相同的名称。 impalaimpala,我认为 Python 正在访问类,而不是实例。

为避免这种情况,我建议您使用PEP-8 作为变量名,在CapWords 和局部变量lowercase_with_underscores 中提供类名。当然,您在命名项目时也应该小心,不要在同一个命名空间中有两个具有相同名称的事物。

>>> class Area(object):
...     def __init__(self, name, items):
...         self.name = name
...         self.items = items
... 
>>> class Impala(Area):
...     def __init__(self):
...         self.name = "Impala"
...         self.items = ["shotgun", "salt"]
... 
>>> impala = Impala()
>>> impala.items
['shotgun', 'salt']

【讨论】:

  • 好的,Impala 是一个子类,而不是一个实例。知道了,谢谢你的链接!
  • @Lattyware。您的解释忽略了 Jen Camara 没有创建实例,这是关键问题。
  • @StevenRumbalski 我不明白这是他想要做的,老实说。不过,我不会费心复制 cmets 中已经说过的话。
猜你喜欢
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
相关资源
最近更新 更多