>>> class C:
def __init__(self,size = 10 ):
self.size = size
def getSize(self):
return self.size
def setSize(self,value):
self.size = value
def delSize(self):
del self.size
x = property(getSize,setSize,delSize)#property 函数的作用是 在新式类中返回属性
>>> c = C()
>>> c.x =1
>>> c.x
1
>>> c.size
1
>>>
语法
以下是 property() 方法的语法:
class property([fget[, fset[, fdel[, doc]]]])
参数
- fget -- 获取属性值的函数
- fset -- 设置属性值的函数
- fdel -- 删除属性值函数
- doc -- 属性描述信息
返回值
返回新式类属性。
下面我们来看一个例子:
class C:
def __getattribute__(self,name):
print('getattribute')
return super().__getattribute__(name)
def __getattr__(self,name):
print('getattr')
def __setattr__(self,name,value):
print('setattr')
super().__setattr__(name,value)
def __delattr__(self,name):
print('delatter')
super().delattr__(name)
>>> c = C()
>>> c.x#访问某个属性
getattribute
getattr
>>> c.x = 1
setattr
>>> del c.x
delatter
自己练习时遇到的问题:
问编写Demo类使得下面方法可以运行:
>>> demo = Demo()
>>> demo.x
'FishC'
>>> demo.x = "X-man"
>>> demo.x
'X-man'
自己写的初版:
class DEmo:
def __getattr__(self,name):
return 'FishC'
def __setattr__(self,name,value):
self.name = value #翻了 下一篇文章的错误!!!注释即为正确答案
#super().__setattr__(name,value)
另解(仅需要修改__getattr__方法,__setattr__默认调用即可)
>>> class Demo:
def __getattr__(self, name):
self.name = 'FishC'
return self.name
修饰器
import time
def timeslong(func):
def call():
start = time.clock()
print("It's time starting ! ")
func()
print("It's time ending ! ")
end = time.clock()
return "It's used : %s ." % (end - start)
return call
@timeslong
def f():
y = 0
for i in range(10):
y = y + i + 1
print(y)
return y
print(f())
@timelong 是一个函数 具体看下面输出 分析执行过程
It's time starting !
1
3
6
10
15
21
28
36
45
55
It's time ending !
It's used : 0.13517907916130642 .
>>>