#静态属性
#类既有函数属性又有数据属性,实例只有数据属性。我们在使用实例调用类的函数
#属性并运行时,总要带上函数后面的括号才能运行,不然总是调用函数的内存地址。
#类中提供了@property关键字,当加上这个关键字之后,就可以像调用类的属性一
#样来直接调用并运行类的函数
#实例(没有@property)
class StaticP_1:
sp_1 = '静态方法' #类属性
def __init__(self,name,addr):
self.name = name #实例属性
self.addr = addr #实例属性
def show_1(self):
print('%s静止在%s'%(self.name,self.addr))
s = StaticP_1('书','书架')
print(s.sp_1) #调用类属性
print(s.show_1) #返回的是函数的内存地址
s.show_1() #要加括号才能调用并运行函数
print('----------------end------------')
#实例(加了@property之后)
class StaticP_2:
sp_2 = '静态方法'
def __init__(self,name,addr):
self.name = name
self.addr = addr
@property #注意点
def show_2(self):
print('%s静止在%s'%(self.name,self.addr))
return
s = StaticP_2('书','书架')
print(s.show_2) #直接调用类函数,不用加括号
print('----------------end------------')
#类方法
#@classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需
#要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。
class StaticP_3:
sp_3 = '静态方法'
def __init__(self,name,addr):
self.name = name
self.addr = addr
@property #注意点
def show_3(self):
print('%s静止在%s'%(self.name,self.addr))
return
@classmethod
def func(cls): #cls就相当于类
print('cls--->',cls) #<class '__main__.StaticP_3'>
print('类的数据属性-->',cls.sp_3) #返回静态方法
s = StaticP_3('书','书架')
print(s.show_3) #直接调用类函数,不用加括号
s.func()
StaticP_3.func() #不需要实例化就可以调用
#StaticP_3.show_3() #报错
print('----------------end------------')
# staticmethod 返回函数的静态方法:从而可以实现实例化使用,也可以不实例化调用该方法
#静态方法
class StaticP_4:
sp_4 = '静态方法'
def __init__(self,name,addr):
self.name = name
self.addr = addr
@property #注意点
def show_4(self):
print('%s静止在%s'%(self.name,self.addr))
return
@classmethod
def func(cls): #cls就相当于类,#用类调用类参数
print('cls--->',cls) #<class '__main__.StaticP_3'>
print('类的数据属性-->',cls.sp_4) #返回静态方法