zoukankan      html  css  js  c++  java
  • 【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已就位....

  • 相关阅读:
    ZROI NOI2019集训汇总
    牛客 在二叉树中找到累加和为指定值的最长路径长度
    牛客 遍历二叉树的神级方法
    牛客 打印二叉树边界节点
    牛客 实现二叉树先序,中序和后序遍历
    LeetCode K个一组翻转链表
    LeetCode 相交链表&环形链表II
    LeetCode 分隔链表
    LeetCode 复制带随机指针的链表
    LeetCode 回文链表
  • 原文地址:https://www.cnblogs.com/watalo/p/12330354.html
Copyright © 2011-2022 走看看