python(静态,组合,继承)

静态属性

用@property修饰类的行为,把类的行为变成类的属性,有封装的作用

例子.

# -*- coding: utf-8 -*-
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):
        return self.Length*self.Width

room1=Room('102','alex',10,10,3)
#没有加@property前的调用 # s=room1.cal_area() # print(s) room2=Room('103','alex',10,5,3) # s2=room2.cal_area() # print(s2)
#加@property后的调用 s1=room1.cal_area print(s1) s2=room2.cal_area print(s2)

类的方法(在没有把类实例化情况下调用类的方法)

@classmethod

# -*- coding: utf-8 -*-
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

    def cal_area(self):
        return self.Length*self.Width

    @classmethod
    def info(cls):
        print('我是类方法')
        
Room.info()

静态方法

@staticmethod

静态方法只是名义上归属类管理,不能使用类变量与实例变量,是类的工具包

# -*- coding: utf-8 -*-
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

    def cal_area(self):
        return self.Length*self.Width

    @classmethod
    def info(cls):
        print('我是类方法')

    @staticmethod
    def live(a,b):
        print('%s和%s是住户'%(a,b))
#类调用
Room.live('alex','bob')
#实例调用
room1=Room('102','alex',10,10,3)
room1.live('alex','bob')

总结:@property只与实例绑定(静态属性既可以访问实例属性,又可以访问类属性),@classmethod只与类绑定(类方法只能访问类的属性),@staticmethod类和实例都可以用(类方法既不能类属性,也不能实例属性)

猜你喜欢

转载自www.cnblogs.com/2018-1025/p/12019670.html