未使用静态属性之前:
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
def cal_area(self):
print(‘%s 住的 %s 总面积是%s‘ % (self.owner,self.name, self.width * self.length))
# return self.width * self.length
r1 = Room("room01","小二",10,10,10)
r1.cal_area() #小二 住的 room01 总面积是100@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):
# print(‘%s 住的 %s 总面积是%s‘ % (self.owner,self.name, self.width * self.length)) #TypeError: ‘NoneType‘ object is not callable
return self.width * self.length
r1 = Room("room01","小二",10,10,10)
print(r1.cal_area) #100 ==>调用方式发生了改变
print(r1.width) #10
当我们不想进行实例化,而需要直接获取类的属性时,可以使用类方法@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):
# print(‘%s 住的 %s 总面积是%s‘ % (self.owner,self.name, self.width * self.length))
return self.width * self.length
def test(self):
print(‘from test‘,self.name)
@classmethod #类方法
def tell_info(cls,x):
print(cls)
print(‘--》‘,cls.tag,x) #print(‘--》‘,Room.tag)
# def tell_info(self):
# print(‘---->‘,self.tag)
print(Room.tag) #1
Room.tell_info(10) #--》 1 10 #不需要进行实例化而直接获取类的属性类的工具包@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):
# print(‘%s 住的 %s 总面积是%s‘ % (self.owner,self.name, self.width * self.length))
return self.width * self.length
@classmethod
def tell_info(cls,x):
print(cls)
print(‘--》‘,cls.tag,x)#print(‘--》‘,Room.tag)
# def tell_info(self):
# print(‘---->‘,self.tag)
@staticmethod #类的工具包,不与类绑定,也不与实例绑定
def wash_body(a,b,c): #可以不传参
print(‘%s %s %s正在洗澡‘ %(a,b,c))
def test(x,y):
print(x,y)
print(Room.__dict__) #==>‘wash_body‘: <staticmethod object at 0x000002BFB0BB4630>
r1=Room(‘room12‘,‘alex‘,100,100,100000)
print(r1.__dict__) #{‘width‘: 100, ‘heigh‘: 100000, ‘length‘: 100, ‘name‘: ‘room12‘, ‘owner‘: ‘alex‘}
原文:https://www.cnblogs.com/hujinzhong/p/11487391.html