计算所居住房子的面积
普通写法
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 不是静态方法
静态方法
原文地址:https://www.cnblogs.com/pyhan/p/12312083.html
时间: 2024-11-11 18:02:54