如何避免类动态绑定属性,并避免创建开销
**对象的动态绑定实际上是通过__dict方法实现的,通过实现__slots函数声明对象具备的属性,可以避免类生成dict函数
##通过slots声明函数,避免对象动态绑定参数
class People:
__slots__ = ['name', 'age', 'level']
如何让类支持上下文管理,即with..as方法
实现类的enter和exit方法
class People:
###通过slots声明函数,避免对象动态绑定参数
__slots__ = ['name', 'age', 'level']
def __init__(self, name, age, level):
self.name = name
self.age = age
self.level = level
def __enter__(self):
print("开始介入的对象名称是 %s" % (self.name))
return self
####exc_type:异常类型 异常值 异常栈
def __exit__(self, exc_type, exc_val, exc_tb):
print("结束")
def start(self):
print("haha %s" % (self.name))
#with语法会调用类的enter方法,这里people返回自身 as语法把enter的返回值付给p
with People('guo', '13', 5) as p:
p.start()
使用property函数规定参数的get,set方法
这里参数R的get,set方法通过property函数 指定为了getR,setR函数,调用r=10,实际上触发的是setR方法
class Circle:
def __init__(self):
self.__radius=0
def setR(self, raw):
self.__radius=raw
def getR(self):
return self.__radius
"""
1.参数一表示获取r值时的方法
2.参数二表示给R赋值时调用什么方法
"""
R = property(getR,setR)
cir=Circle()
cir.R=10
网友评论