汇总
名称 | 语法 | 作用 | 示例 |
类方法 | @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已就位....