对象实用操作

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

**对象的动态绑定实际上是通过__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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...
    victorsungo阅读 1,568评论 0 6
  • Python进阶框架 希望大家喜欢,点赞哦首先感谢廖雪峰老师对于该课程的讲解 一、函数式编程 1.1 函数式编程简...
    Gaolex阅读 5,529评论 6 53
  • 璲心集|七璲 作 喜欢桂花的香是那种可以食享的气息喜欢桂花的色是那种可以宴饷的观觉喜欢桂花的味是那种可以品赏的萦...
    安步斋阅读 285评论 0 0
  • 原文:http://blog.sina.com.cn/s/blog_c70304d60102x93c.html 因...
    油菜花花花花阅读 984评论 0 0
  • 终于他们还是把持不住了,老岳轻轻起身,慢慢向小蛮这边凑了过来,小蛮也知道他们是一定要发生些什么的。老岳搂住小蛮的肩...
    我是白小姐阅读 2,881评论 0 0