python:_, __ 和__xx__辨异

来源:互联网 发布:android 7.0源码分析 编辑:程序博客网 时间:2024/06/07 22:19

One underline in the beginning

Python实际上并没有私有方法,在方法/属性开头的下划线意味着:不要访问该方法,表明这个方法并非API的一部分。

class BaseForm(StrAndUnicode):    ...        def _get_errors(self):        "Returns an ErrorDict for the data provided for the form"        if self._errors is None:            self.full_clean()        return self._errors        errors = property(_get_errors)

errors是属性,属于API的一部分;而它调用的方法_get_errors是类的私有方法,所以是不能为访问到的。 

Two underlines in the beginning

在开头有双下划线目的是避免该方法被子类覆盖,请不要把该方法标记为private。

class A(object):    def __method(self):        print "I'm a method in A"        def method(self):        self.__method()     a = A()a.method()

输出为:

$ python example.py I'm a method in A


让我们再来定义A的子类并且定义__method方法,

class B(A):    def __method(self):        print "I'm a method in B"b = B()b.method()

则输出为:

$ python example.pyI'm a method in A

可见,A.method() 并未调用B.__method()。也就是说,如果你创建__开头的方法名,也就意味着你不希望任何人覆盖这个方法,只能在该类中访问到该方法。

a = A()a._A__method()  # never use this!! please!
$ python example.pyI'm a method in A


Two underlines in the beginning and in the end

如果一个方法的形式好像 __this__,规则就简单了:请勿创建。

>>> name = "igor">>> name.__len__()4>>> len(name)4>>> number = 10>>> number.__add__(20)30>>> number + 2030

比如在创建对象时python调用__init__();在建实例时,python会调用__new__()。

class CrazyNumber(object):        def __init__(self, n):        self.n = n        def __add__(self, other):        return self.n - other        def __sub__(self, other):        return self.n + other        def __str__(self):        return str(self.n)num = CrazyNumber(10)print num           # 10print num + 5       # 5print num - 20      # 30

另一个例子,

class Room(object):    def __init__(self):        self.people = []    def add(self, person):        self.people.append(person)    def __len__(self):        return len(self.people)room = Room()room.add("Igor")print len(room)     # 1

文档 集中了所有这些特殊方法。






原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 金蝶k3账套管理打不开了怎么办 仁和会计课堂app不能用怎么办 光大银行已经下卡了终审被拒怎么办 过了上诉期和申诉期该怎么办 北外大四学生要实习半年课程怎么办 电脑发给手机的文件过期了怎么办 农民给土地卖了30年后怎么办 家长发家长群作业太多老师怎么办 在考试中心补不了四级成绩怎么办 微信登录密码不记得了怎么办 欠农民工工资不给怎么办老板说没钱 国外期刊催问稿件不理睬怎么办 老公离不开老婆也离不开小三怎么办 出轨被老婆发现还和小三联系怎么办 老公出轨后回家老婆不想原谅怎么办 小三和原配打架都住院了怎么办 毕业太多年查不到学历认证怎么办 没有做税种核定开了票怎么办 在学信网上查不到学历信息怎么办 学信网手机号换了密码忘了怎么办 学信网手机号换了密码也忘了怎么办 学信网上学习形式是星号怎么办 新手机号已被注册微店买家怎么办 微信号被冻结了里面的钱怎么办 不懂公司产品却要接待老外怎么办 上菜时发现桌面摆不下新菜怎么办 超市买到过期产品商家不赔尝怎么办 皇帝成长计划2俘虏的士兵怎么办 晚上楼上有挪桌子的声音怎么办 金灶茶具出故障码e7怎么办 起亚k2灯泡掉进大灯总成怎么办 衣服上拆过线的针孔怎么办 驾考科目二坡道定点熄火怎么办 穿着超短裤感觉要漏屁股怎么办 台式电脑开机后无法进入系统怎么办 产后两年了肚子肥胖松弛怎么办 在作文中写上自己的名字怎么办 外出玩耍时迷路了你会怎么办 外出玩耍时孩子总喜欢乱跑怎么办? 如果真的物价高的受不了怎么办 每晚要5次真的受不了怎么办