美文网首页
对象实用操作

对象实用操作

作者: 石器时代小古董 | 来源:发表于2018-03-25 14:04 被阅读0次

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

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

    相关文章

      网友评论

          本文标题:对象实用操作

          本文链接:https://www.haomeiwen.com/subject/yzbhcftx.html