类的静态属性

#静态属性

#类既有函数属性又有数据属性,实例只有数据属性。我们在使用实例调用类的函数
#属性并运行时,总要带上函数后面的括号才能运行,不然总是调用函数的内存地址。
#类中提供了@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) #返回静态方法

@staticmethod
def fun(price):
print('书的价格为%s'%price)

s = StaticP_4('','书架')
print(s.show_4) #直接调用类函数,不用加括号
s.func()
StaticP_4.func() #不需要实例化就可以调用
#StaticP_4.show_4() #报错
s.fun('10') #实例调用
StaticP_4.fun("10") #类也可以调用
print('----------------end------------')
posted @ 2021-04-14 21:04  ShadowFolk  阅读(468)  评论(0编辑  收藏  举报