我是靠谱客的博主 超帅黑裤,最近开发中收集的这篇文章主要介绍python 私有属性一个_和两个_的区别_python-面向对象-13-私有属性,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

python对于类的成员没有严格的访问控制限制,这与强类型面向对象语言有区别。关于私有属性和私有方法,有如下要点:

通常我们约定,两个下划线开头的方法的属性属于是私有的(private),其他为公共的(public),没有protect的中间态。

类内部可以访问私有属性(方法)

类外部能访问属性,但是不能直接访问私有属性(方法)

类外部可以通过_类名__私有属性名(方法名)的方式访问私有属性(方法),不推荐使用

注意:方法本质上也是属性!只不过是可以通过()执行而已(本质是类型不同)。所以此处讲的私有属性和共有属性,也同时适用于私有方法 和共有方法的用法。如下测试中,同时包含了私有方法和共有方法的例子。

直接使用私有属性

代码示例:

class Employee:

def __init__(self, name, age):

self.name = name

self.__age = age # 定义私有属性

e = Employee("聂发俊", 100)

print(e.name)

print(e.age)

运行结果:

聂发俊

Traceback (most recent call last):

File "test.py", line 10, in

print(e.age)

AttributeError: 'Employee' object has no attribute 'age'

程序说明:

在定义类Employee时,定义了公开属性name以及私有属性age,首先实例化对象e,因为name属性公开,可以直接打印。但是age属性属于私有属性,不能直接访问,提示错误信息: AttributeError: 'Employee' object has no attribute 'age'.

通过_类名__私有属性名(方法名)访问

示例代码:

class Employee:

def __init__(self, name, age):

self.name = name

self.__age = age

e = Employee("聂发俊", 100)

print(dir(e))

print(e._Employee__age)

print(e.name)

运行结果:

['_Employee__age', '__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__', 'name']

100

聂发俊

程序说明:

通过dir()方法打印对象e的所有属性,我们看到第一个属性就是_Employee__age,也就是私有属性age转换的可访问属性,然后最后一个属性是name,我们自定义的实例属性。当我们后面分别打印_Employee__age和name属性,都打印出对应的结果。

备注:

更多精彩博客,请访问:聂发俊的技术博客

对应视频教程,请访问:python400

完整markdown笔记,请访问: python400_learn_github

最后

以上就是超帅黑裤为你收集整理的python 私有属性一个_和两个_的区别_python-面向对象-13-私有属性的全部内容,希望文章能够帮你解决python 私有属性一个_和两个_的区别_python-面向对象-13-私有属性所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部