概述
1私有方法说明
python对于类的成员没有严格的访问控制限制,这与强类型面向对象语言有区别。关于私有属性和私有方法,有如下要点:
- 通常我们约定,两个下划线开头的方法属于是私有的(private)方法,其他方法为公共的(public)方法,没有protect的中间态。
- 类内部可以访问私有属性(方法)
- 类外部能访问属性,但是不能直接访问私有属性(方法)
- 类外部可以通过
_类名__私有属性名(方法名)
的方式访问私有属性(方法),不推荐使用
注意:方法本质上也是属性!只不过是可以通过()执行而已(本质是类型不同)。所以此处讲的私有属性和共有属性,也同时适用于私有方法 和共有方法的用法。如下测试中,同时包含了私有方法和共有方法的例子。
通过私有属性和私有方法,我们能感受出来,Python虽然是纯面向对象的一门语言,但是不像C++和Java那样严格,甚至有些违背面向对象封装的特性,偷偷开个口子,使用
_类名__私有属性名(方法名)
的方式去访问私有属性(方法),算了为了语法简洁、方便好用的一种折中吧。
代码示例1:
class Employee:
def __init__(self, name, age):
self.name = name
self.age = age
def pub_work(self):
print("公开的work方法")
def __pri_work(self):
print("私有的work方法")
e = Employee("聂发俊", 100)
print(e.pub_work())
print(e.pri_work())
运行结果:
公开的work方法
None
Traceback (most recent call last):
File "test.py", line 18, in <module>
print(e.pri_work())
AttributeError: 'Employee' object has no attribute 'pri_work'
程序说明:
类Employee
定义了一个公用方法pub_work
和私有方法pri_work
。首先实例化对象e
,然后分别执行公开方法pub_work
,首先在函数内容打印:公开的work方法
,因为没有显示返回值,则默认为None
,第二行打印:None
。然后执行私有方法,由于私有方法不能直接访问,所以提示错误信息:AttributeError: 'Employee' object has no attribute 'pri_work'
。
示例代码2
class Employee:
def __init__(self, name, age):
self.name = name
self.age = age
def __work(self):
print("好好工作")
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']
程序说明:
通过_类名__私有方法名
可以正常调用私有方法,但是不建议这么做。
备注:
更多精彩博客,请访问:聂发俊的技术博客
对应视频教程,请访问:python400
完整markdown笔记,请访问: python400_learn_github
最后
以上就是完美凉面为你收集整理的python-面向对象-14-私有方法的全部内容,希望文章能够帮你解决python-面向对象-14-私有方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复