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)的主要内容,如果未能解决你的问题,请参考以下文章