Python学习第十六课——静态属性(property, classmethod, staticmethod)

Posted PY憨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 不是静态方法
静态方法

 

以上是关于Python学习第十六课——静态属性(property, classmethod, staticmethod)的主要内容,如果未能解决你的问题,请参考以下文章

进阶第十六课 Python模块之Pandas

重学java基础第十六课:jdk jre jvm

重学java基础第十六课:jdk jre jvm

第十六课函数

Python 基础学习第十六天

第十六课----Rsync数据同步工具