我来自java背景,所以在这里我有点困惑。
请考虑下面的代码段
class A():
def __init__(self, **kwargs):
self.obj_var = "I am obj var"
@classmethod
def class_method(cls):
print cls.obj_var # this line is in question here
cls.cls_obj = "I m class object"
return cls.cls_obj
这将引发错误:
In [30]: a = A()
In [31]: a.obj_var
Out[31]: 'I am obj var'
In [32]: a.class_method()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-32-3dcd9d512548> in <module>()
----> 1 a.class_method()
<ipython-input-29-9c0d341ad75f> in class_method(cls)
8 @classmethod
9 def class_method(cls):
---> 10 print cls.obj_var
11 cls.cls_obj = "I m class object"
12 return cls.cls_obj
AttributeError: class A has no attribute 'obj_var'
如果我评论@classmethod
,将可以正常工作。
我的理解(肯定不正确:
当我执行a = A()
时,当传递给同一类的任何其他obj_var
时,可以通过__init__
访问在a
中创建的所有变量(classmethod
)。显然不是这种情况。
问题
当方法中提到装饰器__init__
时,为什么我无法访问var
中的class_method
@classmethod
,但是在移除装饰器时,它工作正常吗?
python在编译时如何在内部处理此特定类?
有什么方法可以以相同的方法使用@classmethod
和__init__
变量吗?
我来自Java背景,因此在这里我有些困惑。考虑类A()下的代码片段:def __init __(self,** kwargs):self.obj_var =“我是obj var” @classmethod ...
让我们谈谈Python方法实际上是如何工作的。
如果要从类方法访问实例变量,则需要创建存在该实例变量的类的实例。希望下面的代码可以工作。