python私有属性怎么输出_Centos7中python使用类属性的私有输出

本文介绍了Python中类的私有属性定义,通过一个实例展示了如何创建私有属性,并解释了为何通过`_Test__num`而非`__num`来访问私有属性。在Python中,私有属性可以通过在其名称前加上两个下划线进行声明,但实际访问时需要使用`_类名__属性名`的方式。此外,还强调了私有属性并非完全不可访问,只是调用方式不同。
摘要由CSDN通过智能技术生成

最近学习Python的利用,扩展记录一下类的私有属性定义。

0fa909c95889fcdf39e24be6c2c57de6.png

演示实例:

创建一个py文件,写入一个类属性的私有化。

#vim private.py

1 class Test(object):

2     def __init__(self):

3         self.__num=110#类属性的私有化。

4

5 t = Test()

6 print (t.__num)#输出类的私有属性

保存测试类私有属性出书

[root@localhost day01]# vim  private.py

[root@localhost day01]# python3 private.py

Traceback (most recent call last):

File "private.py", line 6, in

print (t.__num)

AttributeError: 'Test' object has no attribute '__num'

#报错,对象Test没有属性__num.因为属性已经被加了__私有化。如果改成输出是t._Test__num就可以正常输出。为什么。看下面!

#vim private.py(再次编辑将后面两行注释掉)

1 class Test(object):

2     def __init__(self):

3         self.__num=110#类属性的私有化。

4

5 #t = Test()

6 #print (t.__num)#输出类的私有属性

[root@localhost day01]# ipython3

/usr/python-3.4.6/lib/python3.4/site-packages/IPython/core/history.py:226: UserWarning: IPython History requires SQLite, your history will not be saved

warn("IPython History requires SQLite, your history will not be saved")

Python 3.4.6 (default, Jan 24 2019, 11:20:45)

Type 'copyright', 'credits' or 'license' for more information

IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import private

In [2]: t = Test() #不能直接将类直接赋值给变量。

---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

in ()

----> 1 t = Test()

NameError: name 'Test' is not defined

In [3]: t = private.Test()#必须加上文件名字

In [4]: dir(t) #查看对象中的类属性、方法等用dir(x)

Out[4]:

['_Test__num', #对象前面加上_表示已经对象重组,实际就是改名字。直接引用t.Test__num不行。要用t._Test__num;

'__class__',

'__delattr__',

'__dict__',

'__dir__',

'__doc__',

'__eq__',

'__format__',

'__ge__',

'__getattribute__',

'__gt__',

'__hash__',

'__init__',

'__le__',

'__lt__',

'__module__',

'__ne__',

'__new__',

'__reduce__',

'__reduce_ex__',

'__repr__',

'__setattr__',

'__sizeof__',

'__str__',

'__subclasshook__',

'__weakref__']

In [5]:

In [5]: t._Test__num #使用t,_Test__num可以输出,或者将private文件中输出改成print(t._Test__num)

Out[5]: 110

总结:类的私有属性,不要看得太加复杂相当于,一个对象有私有属性,给他加上私有标签,调用时加上私有标签就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值