• <nav id="dstbx"></nav>

    <nav id="dstbx"></nav>
    1. <form id="dstbx"></form>
    2. <small id="dstbx"></small>

      教育行业A股IPO第一股(股票代码 003032)

      全国咨询/投诉热线:400-618-4000

      Python中怎样定义类方法和修改类的属性?

      更新时间:2021年07月14日16时48分 来源:传智教育 浏览次数:

      好口碑IT培训

      Python中的类还可定义使用@classmethod修饰的类方法和使用@staticmethod修饰的静态方法,下面分别介绍这两种方法。

      类方法与实例方法有以下不同:

      (1)类方法使用装饰器@classmethod修饰;

      (2)类方法的第一个参数为cls而非self,它代表类本身;

      (3)类方法即可由对象调用,亦可直接由类调用;

      (4)类方法可以修改类属性,实例方法无法修改类属性。

      下面分别介绍如何定义类方法,以及如何使用类方法修改类属性。

      1.定义类方法

      类方法可以通过类名或对象名进行调用,其语法格式如下:

      类名.类方法
      对象名.类方法

      定义一个含有类方法use_classmet()的类Test,示例代码如下:

      class Test:
          @classmethod
          def use_classmet(cls):
              print("我是类方法")

      创建类Test的对象test,分别使用类Test和对象test调用类方法use_classmet(),具体代码如下:

      test = Test() 
      test.use_classmet()  # 对象名调用类方法
      Test.use_classmet()  # 类名调用类方法

      运行代码,结果如下所示:

      我是类方法
      我是类方法

      从输出结果中可以看出,使用类名或对象名均可调用类方法。

      2.修改类属性

      在实例方法中无法修改类属性的值,但在类方法中可以将类属性的值进行修改。例如,定义一个Apple类,该类中包含类属性count、实例方法add_one()和类方法add_two(),示例代码如下:

      class Apple(object):        # 定义Apple类
          count = 0               # 定义类属性
          def add_one(self):     
              self.count = 1      # 对象方法
          @classmethod    def add_two(cls):
              cls.count = 2       # 类方法

      创建一个Apple类的对象apple,分别使用对象apple和类Apple调用实例方法add_one()和类方法add_two(),修改类属性count的值,并在修改之后访问类属性count。示例代码如下:

      apple = Apple()
      apple.add_one()    
      print(Apple.count) 
      Apple.add_two()
      print(Apple.count)

      运行程序,结果如下所示:

      0
      2

      从输出结果中可以看出,调用实例方法add_one()后访问count的值为0,说明属性count的值并没有被修改;调用类方法add_two()后再次访问count的值为2,说明类属性count的值被修改成功。

      可能大家会存在这样的疑惑,在实例方法add_one()中明明通过“self.count = 1”重新为count赋值,为什么count的值仍然为0呢?这是因为,通过“self.count = 1”只是创建了一个与类属性同名的实例属性count并将其赋值为1,而非对类属性重新赋值。通过对象apple访问count属性进行测试:

      print(apple.count)

      运行程序,结果如下所示:

      1





      猜你喜欢:

      Python常见异常类型介绍

      Python不同数据类型可以相互转换吗?[python培训]

      final有什么作用?Java中final类的作用

      传智教育Python+大数据开发高手班

      0 分享到:
      神马影院我不卡