zoukankan      html  css  js  c++  java
  • Python学习第十六课——静态属性(property, classmethod, staticmethod)

    计算所居住房子的面积

    普通写法

    class Room:
        def __init__(self,name,owner,width,length,heigh):
            self.name=name
            self.owner=owner
            self.width=width
            self.lenth=length
            self.heigh=heigh
    
        def cal_area(self):
            print('%s 住的 %s 总面积为 %s' %(self.owner,self.name,self.heigh*self.width))
    
    r1=Room('别墅','憨憨',100,100,100)
    r2=Room('大别墅','玫玫',1000,1000,1000)
    
    r1.cal_area() # 憨憨 住的 别墅 总面积为 10000
    r2.cal_area() # 玫玫 住的 大别墅 总面积为 1000000

    property 写法

    # property 用法
    class Room:
        def __init__(self, name, owner, width, length, heigh):
            self.name = name
            self.owner = owner
            self.width = width
            self.lenth = length
            self.heigh = heigh
    
        @property  # 装饰器property 可以将 方法 转化为属性  在下面调用时  不需要带括号
        def cal_area(self):
            print('%s 住的 %s 总面积为 %s' % (self.owner, self.name, self.heigh * self.width))
    
    
    r1 = Room('别墅', '憨憨', 100, 100, 100)
    r2 = Room('大别墅', '玫玫', 1000, 1000, 1000)
    
    r1.cal_area  # 憨憨 住的 别墅 总面积为 10000
    r2.cal_area  # 玫玫 住的 大别墅 总面积为 1000000

    类方法(classmethod)

    class Room:
    
        tag=1
        def __init__(self,name,owner,width,length,heigh):
            self.name=name
            self.owner=owner
            self.width=width
            self.lenth=length
            self.heigh=heigh
        @property
        def cal_area(self,):
    
            return self.heigh*self.width
    
        def test(self,):
    
            print('from test',self.name)
    
        @classmethod  # 变为了类方法
        def tell_info(cls):
            print(cls)
            print('---->', cls.tag)
    
    
        # def tell_info(self):
        #     print('---->',self.tag)
    
    print(Room.tag)  # 1
    # r1=Room('别墅','憨憨',100,100,100)
    # Room.test('测试')
    
    #Room.tell_info(r1) # ----> 1
    Room.tell_info() # ----> 1  拥有cls  就不需要实例化对象了

    静态方法

    class Room:
    
        tag=1
        def __init__(self,name,owner,width,length,heigh):
            self.name=name
            self.owner=owner
            self.width=width
            self.lenth=length
            self.heigh=heigh
        @property  # 静态属性
        def cal_area(self,):
    
            return self.heigh*self.width
    
        def test(self,):
    
            print('from test',self.name)
    
        @classmethod  # 变为了类方法
        def tell_info(cls):
            print(cls)
            print('---->', cls.tag)
    
        @staticmethod  # 静态方法只是名义上归属性管理,不能使用类变量和实例变量,是类的工具包
        def wash_body(a,b,c):
            print('%s %s %s 正在洗澡 '%(a,b,c))
    
        def test(x,y,z):
            print(x,y,z)
    
    
    Room.wash_body('k','l','o') # k l o 正在洗澡
    r1=Room('别墅','憨憨',100,100,100)
    r1.wash_body('k','l','o') # k l o 正在洗澡
    
    
    Room.test('k','l','o') # k l o
    r1.test('k','l','o') # 报错了  不能这样调用  因为test 不是静态方法
    静态方法
  • 相关阅读:
    多线程(一)高并发和多线程的关系
    spring源码浅析——IOC
    网络爬虫(java)
    数据结构—平衡二叉树
    设计模式—抽象工厂模式
    设计模式—工厂方法模式
    scala(二) Future执行逻辑解读
    java异常处理机制
    为什么覆写equals必须要覆写hashCode?
    Scala对MongoDB的增删改查操作
  • 原文地址:https://www.cnblogs.com/pyhan/p/12312083.html
Copyright © 2011-2022 走看看