加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 所有类方法中的类变量访问

发布时间:2020-12-20 11:38:39 所属栏目:Python 来源:网络整理
导读:我想要一个类变量,以便可以在所有实例中访问该值,但我还想在类中的方法中访问该变量.那可能吗?我试过这个,但它根本不起作用. class myClass: myvariable = 1 def add(): myvariable+= 1 def print1(): print myvariable 我想制作两个实例,一个只做add方法,
我想要一个类变量,以便可以在所有实例中访问该值,但我还想在类中的方法中访问该变量.那可能吗?我试过这个,但它根本不起作用.

class myClass:
   myvariable = 1

   def add():
      myvariable+= 1

   def print1():
      print myvariable

我想制作两个实例,一个只做add方法,另一个只做print1方法

解决方法

是的,只需访问类对象上的变量:

class myClass(object):
    myvariable = 1

    def add(self):
        myClass.myvariable += 1

    def print1(self):
        print myClass.myvariable

或者如果要为每个子类设置它,请使用type(self):

class myClass(object):
    myvariable = 1

    def add(self):
        type(self).myvariable += 1

    def print1(self):
        print type(self).myvariable

不同之处在于后者将在设置时在任何子类上创建单独的属性,从而屏蔽基类属性.这就像在实例上设置属性会掩盖class属性一样.

虽然你也可以通过self获取class属性(print self.myvariable),但显式优于隐式,并且避免意外被同名的实例属性屏蔽.设置类属性总是必须在类上完成;将其设置为self将改为创建或更新实例属性(不共享).

尽管从对象继承你的类;使用新式类有很多优点,至少那个类型(self)实际上会返回类.在旧式类(不是从对象继承)中,你必须使用self .__ class__.

使用对象作为基础也为您提供了第三个选项,类方法与@classmethod decorator;当您只需要访问类对象而不是实例时,请使用这些.这些方法绑定到当前(子)类,因此它们对类属性的影响与使用类型(self)相同:

class myClass(object):
    myvariable = 1

    @classmethod
    def add(cls):
        cls.myvariable += 1

    @classmethod
    def print1(cls):
        print cls.myvariable

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读