对象实用操作

如何避免类动态绑定属性,并避免创建开销

**对象的动态绑定实际上是通过__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

你可能感兴趣的:(对象实用操作)