1privatemethod说明python对类成员没有严格的访问控制限制,这一点不同于强类型的面向对象语言。关于私有属性和私有方法,有以下几个要点:通常我们约定两个下划线开头的方法为私有方法,其他方法为公共方法,没有protect的中间状态。类内部可以访问私有属性(方法),类外可以访问属性,但是不能直接访问私有属性(方法)。私有属性(方法)可以通过_类名__私有属性名(方法名)在类外访问,不推荐使用注意:方法本质上也是属性!只是可以通过()来执行(本质是类型不同)。因此,这里所说的私有属性和公有属性同样适用于私有方法和公有方法的使用。在以下测试中,包括私有和公共方法的示例。通过私有属性和私有方法,我们可以感受到Python虽然是一门纯面向对象的语言,但并不像C++和Java那样严格,甚至违背了面向对象封装的特点。__私有属性名(方法名)来访问私有属性(方法),忘记语法简洁、方便易用的妥协。代码示例1:classEmployee:def__init__(self,name,age):self.name=nameself.age=agedefpub_work(self):print("publicworkmethod")def__pri_work(self):print("privateworkmethod")e=Employee("NieFajun",100)print(e.pub_work())print(e.pri_work())运行结果:publicworkmethodNoneTraceback(mostrecentcalllast):File"test.py",line18,inprint(e.pri_work())AttributeError:'Employee'objecthasnoattribute'pri_work'程序描述:Employee类定义了一个公共方法pub_work和一个私有方法pri_work。先实例化对象e,然后分别执行public方法pub_work。首先在函数内容中打印:publicwork方法,因为不显示返回值,所以默认是None,第二行打印:None。然后执行私有方法。由于不能直接访问私有方法,所以提示错误信息:AttributeError:'Employee'objecthasnoattribute'pri_work'。示例代码2classEmployee:def__init__(self,name,age):self.name=nameself.age=agedef__work(self):print("Goodwork")e=Employee("聂法军",100)print(dir(e))print(e._Employee__work())结果:运行良好None['_Employee__work','__class__','__delattr__','__dict__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__gt__','__hash__','__init__','__init_subclass__','__le__','__lt__','__module__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','__weakref__','age','name']过程说明:通过_class名__私有方法名可以正常调用私有方法,但不推荐这样做。备注:更多精彩博客请访问:聂法军技术博客对应视频教程请访问:python400完整markdown笔记请访问:python400_learn_github