• python学习笔记二


    1.python中的几种变量

    1)__x 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

    双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量

    2) __x__需要注意的是,在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name____score__这样的变量名。

    3) _x有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

    2.python中几种特殊的函数

      __func表示不希望外部访问,但是事实上也可以访问,这体现了python的设计哲学,只提供建议,一切全靠自觉。

          __func__是可以被重写的函数,被其他函数隐式调用,这些实际上是用来定制类的方法

      __len__ len()其实调用了__len__

    __str__被print隐式调用

    __repr__ 直接显示变量时候调用,(两者的区别是__str__()返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的)

    __iter__ 如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。(通常也需要重写next方法)

    __getitem__ 要表现得像list那样按照下标取出元素,需要实现__getitem__()方法

    _setitem__()方法,把对象视作list或dict来对集合赋值。最后,还有一个__delitem__()方法,用于删除某个元素

      __slot__用来限制类可以添加的属性

    Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性。使用__slots__要注意,__slots__定义的属性仅对当前类起作用,对继承的子类是不起作用的。除非在子类中也定义__slots__,这样,子类允许定义的属性就是自身的__slots__加上父类的__slots__

    __getattr__ 正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错。要避免这个错误,除了可以加原来没有的属性外,Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性。只有在没有找到属性的情况下,才调用__getattr__,已有的属性,比如name,不会在__getattr__中查找。

    __call__ 只需要定义一个__call__()方法,就可以直接对实例进行调用,__call__()还可以定义参数。对实例进行直接调用就好比对一个函数进行调用一样,所以你完全可以把对象看成函数,把函数看成对象,因为这两者之间本来就没啥根本的区别。怎么判断一个变量是对象还是函数呢?其实,更多的时候,我们需要判断一个对象是否能被调用,能被调用的对象就是一个Callable对象,比如函数和我们上面定义的带有__call()__的类实例

    1)type()判断对象类型

    2)isinstance()判断对象类型,判断是否继承子某个父类

    3)dir() 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list

    4) help()获得对象的详细信息

    仅仅把属性和方法列出来是不够的,配合getattr()setattr()以及hasattr(),还可以直接操作一个对象的状态,这些优点类似于其他高级语言中的反射

    5)Python内置的@property装饰器就是负责把一个方法变成属性调用的,多用于getter,与之对应的是@属性.setter

     

  • 相关阅读:
    jQuery万能放大镜插件(普通矩形放大镜)
    Mysql增量写入Hdfs(二) --Storm+hdfs的流式处理
    Mysql增量写入Hdfs(一) --将Mysql数据写入Kafka Topic
    Spark SQL,如何将 DataFrame 转为 json 格式
    贝叶斯分类算法实例 --根据姓名推测男女
    从分治算法到 Hadoop MapReduce
    Actor模型浅析 一致性和隔离性
    写博客的思考
    scala模式匹配详细解析
    [转] Scala 中的异步事件处理
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/4151975.html
Copyright © 2020-2023  润新知