我正在尝试访问外部函数中的类变量,但是我得到了AttributeError,“类没有属性”我的代码看起来像这样:
class example():
def __init__():
self.somevariable = raw_input("Input something: ")
def notaclass():
print example.somevariable
AttributeError: class example has no attribute 'somevariable'
其他问题与此类似,但所有答案都表示使用self并在 init 期间定义,我这样做了。为什么我无法访问此变量。
答案 0 :(得分:14)
如果要创建类变量,必须在任何类方法之外声明它(但仍在类定义中):
class Example(object):
somevariable = 'class variable'
有了这个,您现在可以访问您的类变量。
>> Example.somevariable
'class variable'
您的示例无效的原因是您要为instance
变量分配值。
两者之间的区别在于,一旦创建了类对象,就会创建一个class
变量。而一旦对象被实例化,并且只有在它们被分配之后才会创建instance
变量。
class Example(object):
def doSomething(self):
self.othervariable = 'instance variable'
>> foo = Example()
我们在这里创建了Example
的实例,但是如果我们尝试访问othervariable
,我们会收到错误:
>> foo.othervariable
AttributeError: 'Example' object has no attribute 'othervariable'
由于在othervariable
内分配了doSomething
- 我们还没有调用ityet,因此它不存在。
>> foo.doSomething()
>> foo.othervariable
'instance variable'
__init__
是一种特殊的方法,只要发生类实例化就会自动调用它。
class Example(object):
def __init__(self):
self.othervariable = 'instance variable'
>> foo = Example()
>> foo.othervariable
'instance variable'
答案 1 :(得分:11)
你对什么是类属性感到有点困惑,什么不是。
class aclass(object):
# This is a class attribute.
somevar1 = 'a value'
def __init__(self):
# this is an instance variable.
self.somevar2 = 'another value'
@classmethod
def usefulfunc(cls, *args):
# This is a class method.
print(cls.somevar1) # would print 'a value'
def instancefunc(self, *args):
# this is an instance method.
print(self.somevar2) # would print 'another value'
aclass.usefulfunc()
inst = aclass()
inst.instancefunc()
可以从类中访问类变量:
print(aclass.somevar1) # prints 'a value'
同样,所有实例都可以访问所有实例变量:
print(inst.somevar2) # prints 'another value'