zoukankan      html  css  js  c++  java
  • python学习笔记-类的静态属性,类方法和静态方法

    静态属性

    静态属性:使用@property

    例子:

    class Room:
        def __init__(self,name,owner,width,length,heigh):
            self.name=name
            self.owner=owner
            self.width=width
            self.length=length
            self.heigh=heigh
        @property               #属性。相当于把一个函数属性当成数据属性
        def cal_area(self):
            return self.width*self.length
    
    
    r1=Room("客厅","steven",3500,5700,3000)
    print(r1.cal_area)#同调用属性,作用是把内在逻辑进行封装,用户感知同调用普通属性一样

    类方法

    类方法:使用@classmethod

    class Room:
        tag=1
        def __init__(self,name,owner,width,length,heigh):
            self.name=name
            self.owner=owner
            self.width=width
            self.length=length
            self.heigh=heigh
        @property               #属性。相当于把一个函数属性当成数据属性
        def cal_area(self):
            return self.width*self.length
        @classmethod            #
        def tell_info(cls):
            print(cls)
            print("-->",cls.tag)
    
    Room.tell_info()  #跟实例没关系,只是类调用方法

    另外:实例虽然也能调用。但主要用于类调用,跟实例每关系,类也不能访问实例的属性。

    静态方法

    静态方法:使用@staticmethod

    静态方法只是名义上的归属类管理,不能使用类变量和实例变量,是类的工具包

    class Room:
        tag=1
        def __init__(self,name,owner,width,length,heigh):
            self.name=name
            self.owner=owner
            self.width=width
            self.length=length
            self.heigh=heigh
        @property               
        def cal_area(self):
            return self.width*self.length
        @classmethod
        def tell_info(cls):
            print(cls)
            print("-->",cls.tag)
        @staticmethod     #不跟类绑定,也不跟实例绑定,相当于只是类的工具包
        def wash_body(a,b,c): #不传self参数
            print("%s %s %s 在洗澡" %(a,b,c))
    
    
    Room.wash_body("steven","job","mark")  #结果为:"steven job mark 在洗澡"
    
    r1=Room("卧室","steven",100,100,100)
    r1.wash_body("steven","job","mark")    #结果为:"steven job mark 在洗澡"

    如果不加@staticmethon,则是跟实例没有关系,r1.wash_body("steven","job","mark")就会报错,因为会传个实例本身作为参数

  • 相关阅读:
    selenium实战脚本集(2)——简单的知乎爬虫
    selenium实战脚本集(1)——新浪微博发送QQ每日焦点
    使用swift和rails来实现ios账号系统
    一段js代码
    你应该学会使用的5个ruby方法
    小而美的ghost driver
    还没被玩坏的robobrowser(8)——robobrowser的实现原理
    还没被玩坏的robobrowser(7)——表单操作
    还没被玩坏的robobrowser(6)——follow_link
    还没被玩坏的robobrowser(5)——Beautiful Soup的过滤器
  • 原文地址:https://www.cnblogs.com/steven223-z/p/12527938.html
Copyright © 2011-2022 走看看