【python之路】【之前没搞明白】7面向对象(类方法、静态方法、属性方法)

 汇总

名称 语法 作用 示例
类方法 @classmethod

使方法只能访问类变量

不能访问实例变量

@classmethod
def run(cls):
  print(cls)
静态方法 @staticmethod 使方法不能访问实例变量和类变量
@staticmethod
def show():
    print('我是静态方法')
属性方法 @property 使方法变成一个属性
@property
def flight_status(self):
    status = self.checking_status()
    if status == 0 :
        print("flight got canceled...")
    elif status == 1 :
        print("flight is arrived...")
    elif status == 2:
        print("flight has departured...")
    else:
        print("cannot confirm ...")

在什么情况下使用?

  假设我要搞一个机器人军队,每个机器人有自己的名字,同时还能共享知道一共有好多机器人。

class Robot( object):
    __count_num = 0 # 封装一个计数的公共属性

    def __init__(self,name):
        self.name = name
        self.produce()
        self.__counter()

    def check_num(self):
        print('所属队伍的机器人数量:%s' % self.__count_num) # 通过接口来检查数量

    @classmethod
    def __counter(cls): # 将计数的方法也封装,不然外部可以调用随便改数量了
        cls.__count_num += 1
        print('机器人军队已有%s个机器人'% cls.__count_num )

    @staticmethod # 感觉没什么卵用,这样用和用@classmethod也没什么区别嘛
    def produce(): 
        print('机器人正在组装....')
        print('机器人已完成组装....')

    @property # 查看机器人的状态,使用属性方法将 stat方法变成属性
    def stat(self):
        return '%s已就位....' % self.name


if __name__ == '__main__':

    r1 = Robot('Cn0')
    r2 = Robot('Cn1')
    r3 = Robot('Cn2')

    r1.check_num()

    print(r1.stat,
          r2.stat,
          r3.stat
          )

结果:

机器人正在组装....
机器人已完成组装....
机器人军队已有1个机器人
机器人正在组装....
机器人已完成组装....
机器人军队已有2个机器人
机器人正在组装....
机器人已完成组装....
机器人军队已有3个机器人
所属队伍的机器人数量:3
Cn0已就位.... Cn1已就位.... Cn2已就位....

原文地址:https://www.cnblogs.com/watalo/p/12330354.html