静态属性、类方法、静态方法

静态属性:

  既可以访问实例属性也可以访问类属性(self)

 1 # --------------静态属性:数据属性----------
 2 class Room:
 3     def __init__(self,name,owner,width,length,height):
 4         self.name=name
 5         self.owner=owner
 6         self.width=width
 7         self.length=length
 8         self.height=height
 9     @property
10     def area_room(self):
11         print('%s住的%s房间的面积是%s' %(self.name,self.owner,self.width*self.length))
12         return self.length*self.width
13 r1=Room('大树','501',3,8,5)
14 r2=Room('果果','502',10,10,5)
15 # print('%s住的%s房间面积是%s' %(r1.name,r1.owner,r1.width*r1.length))
16 # r1.area_room()
17 # r2.area_room()
18 
19 #封装属性
20 print(r1.area_room)
21 print(r2.area_room)
22 print(r1.name)
23 print(r2.name)

类方法:

@classmethod 参数默认为cls-->类 可以访问类属性

# -------------------------类方法:数据属性和函数属性---------------------
# 调用时不与任何实例捆绑
# 类级别的操作 与实例无关 不能访问实例属性
class Room:
    tag=1
    def __init__(self,r_numb,owner,length,width,heigh):
        self.r_numb=r_numb
        self.owner=owner
        self.length=length
        self.width=width
        self.heigh=heigh
    @classmethod#类方法加classmethod
    def tell_info(cls):
        print('this is a test')
        print(cls.tag)
Room.tell_info()#类调用自己的方法 self参数问题

静态方法:

@staticmethod 不能访问类属性和实例属性

# -----------------------静态方法--------------------
#
class Room:
    def __init__(self,name,owner,width,length,height):
        self.name=name
        self.owner=owner
        self.width=width
        self.length=length
        self.height=height
    @property
    def area_room(self):
        return self.length * self.width

    @classmethod  # 类方法加classmethod
    def tell_info(cls):
        print('this is a test')
        print(cls.tag)

    # 静态方法:类的工具包 不与类、实例绑定,不能使用类变量和实例变量
    @staticmethod
    def bathe():
        print('洗澡')
    #test()函数无意义
    def test(x,y):#实例没办法调用此函数 r1.test(1,2)
        print(x+y)
# print(Room.__dict__)
# r1=Room('102','大树',10,3,4)
Room.bathe()
原文地址:https://www.cnblogs.com/gl-gl/p/9205832.html