静态属性、类方法、静态方法
静态属性:
既可以访问实例属性也可以访问类属性(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()