静态属性、类方法、静态方法
@property 将函数属性伪装成数据属性 静态属性
@classmethod #类方法,专门给类使用,与实例无关,类方法只能访问类相关的属性,不能访问实例属性(与实例无关。。。)
@staticmethod #类的工具包,staticmethod静态方法只是名义上的归属类管理,不能使用类变量和实例变量
class Student: date = 'testdate' #姓名,性别,年龄 def __init__(self,stu_name,stu_sex,stu_age,length,width,heigh): self.stu_name = stu_name self.stu_sex = stu_sex self.stu_age = stu_age self.length = length self.width = width self.heigh = heigh @classmethod #类方法,专门给类使用,与实例无关,类方法只能访问类相关的属性,不能访问实例属性(与实例无关。。。) def go_school(cls,x): print('--->',cls,cls.date,x) # def go_school(self):#,vehicle # print('%s骑着一个风似风火似火的上学了'%self.stu_name)#,vehicle # return 1 @property #将函数属性伪装成数据属性 def cal_area(self): print('%s 身高%s身宽%s 体积%s'%(self.stu_name,self.heigh,self.width,self.heigh*self.width)) @staticmethod #类的工具包,staticmethod静态方法只是名义上的归属类管理,不能使用类变量和实例变量 def test1(x,y): #类和实例都可以调用 print(x,y) def test2(x,y): #没有任何意义,类可调用,实例不能调用,self自动传 print(x,y) stu1 = Student('李大江','男',18,2,0.2,2) # print(stu1.cal_area) #函数属性伪装成数据属性的方式去调用 # print(stu1.stu_name) Student.go_school(1)
实例:只有数据属性 类:有数据属性和函数属性 实例对象:可以调用类的数据属性和函数属性(依据函数作用域) @property(静态属性)---->将函数属性,伪装成数据属性访问 类:不能调用 (调用只能拿到一个内存地址,并不会执行(拿到内存地址没什么用)) 实例:可以调用 @classmethod(类方法)---->与类绑定,与实例无任何关系 类:可以调用 实例:不可以调用 (其实可以调用d1.test_classmethod(),不会出错,但是一般不会这样定义和调用) @staticmethod(静态方法-类的工具包)---->不与类绑定,也不与对象绑定,名义上归属类管理,但是不能调用类属性和实例属性 类:可以调用 实例:可以调用
class Desk_base(object): def f2(self): pass class Desk(Desk_base): i = 'i类属性' #类属性 #类:不可以调用 #实例对象:可以调用 #实例属性 def __init__(self,name,width,length,heigh): self.name = name #实例属性 self.width = width self.length = length self.heigha = heigh #类:可以调用 #实例:不可以调用 #定义函数属性,但是没有任何意义,没有这样定义的,但不是错误 def test_not_self(): print('没有传self的方法') #类:可以调用 #实例:可以调用 #类的函数属性 def test_self(self): print('类的普通方法') return self.name #类:不能调用(调用只能拿到一个内存地址,并不会执行) #实例:可以调用 #与实例绑定,将函数属性,伪装成数据属性 @property # 静态属性 def test_property(self): return self.name #类:可以调用 #实例:不可以调用(其实可以调用d1.test_classmethod(),不会出错,但是一般不会这样定义和调用) #与类绑定,与实例无任何关系 @classmethod #类方法 def test_classmethod(cls): ''' 类方法不能调用实例属性 可以调用类方法或类属性 :return: ''' return cls.i #类:可以调用 #实例:可以调用 #不与类绑定,也不与对象绑定,名义上归属类管理,但是不能调用类属性和实例属性 @staticmethod #静态方法(类的工具包) def test_staticmethod(): return '静态方法' d1 = Desk('zk',100,100,101) ''' 实例:只有数据属性 类:有数据属性和函数属性 实例对象:可以调用类的数据属性和函数属性(依据函数作用域) @property(静态属性)---->将函数属性,伪装成数据属性访问 类:不能调用 (调用只能拿到一个内存地址,并不会执行(拿到内存地址没什么用)) 实例:可以调用 @classmethod(类方法)---->与类绑定,与实例无任何关系 类:可以调用 实例:不可以调用 (其实可以调用d1.test_classmethod(),不会出错,但是一般不会这样定义和调用) @staticmethod(静态方法-类的工具包)---->不与类绑定,也不与对象绑定,名义上归属类管理,但是不能调用类属性和实例属性 类:可以调用 实例:可以调用 '''