【发布时间】:2014-10-07 11:28:03
【问题描述】:
class Class:
_member = 1
def method(self):
我想从method() 中访问_member,这样做的正确方法是什么?
【问题讨论】:
标签: python oop class-method class-attribute
class Class:
_member = 1
def method(self):
我想从method() 中访问_member,这样做的正确方法是什么?
【问题讨论】:
标签: python oop class-method class-attribute
class Class:
_member = 1
@classmethod
def method(cls):
print cls._member
Class.method()
还有:
>>> Class().method()
1
>>>
【讨论】:
classmethod 来更改类属性将确保该属性在实例中未被覆盖。
您可以使用self._member,如果它不是对象的属性(在self.__dict__ 中)我相信它会在类__dict__ 中查找,它应该包含类属性。
【讨论】:
method() 我也应该发送Class 的实例作为参数?
self._member。我只是指出,如果你在同名对象上设置一个属性,它将隐藏它,因为它会在类属性之前查找对象属性
Class 实例的脚本中使用method() 时,它告诉我method() 有两个参数,而我只提供了一个(我真正的method() 实际上采用一种方法,而不是像示例中那样没有)
staticmethod,那么它没有状态(没有自我),所以你可以丢失self 参数。发生这种情况的原因是您传递的参数被作为第一个参数 self 传递,而第二个参数未填充。
self._member = 'value' 在实例方法中不会改变类属性,它会创建一个新的实例属性。
class Class:
_member = 1
def method(self):
print "value is ",self._member
创建类的实例并调用方法
c = Class()
c.method()
输出:
value is 1
【讨论】:
class Class:
_member = 1
def method(self):
print(Class._member)
Class().method()
会给出输出:
1
顺便说一句,那是一个类属性。您可以将该方法称为绑定方法。您可以选择静态方法(不需要第一个参数)、类方法(第一个参数是一个类)和普通方法(比如这个)。
【讨论】: