Python 面向对象(3)

本文详细介绍了Python中如何使用双下划线(__)和单下划线(_)创建私有属性,包括设置、访问的限制,以及虽然它们名义上不可见,但仍可通过特定方式访问的特性。此外,还讨论了__属性__和_属性的区别以及如何通过自定义方法操作私有属性。
摘要由CSDN通过智能技术生成

 本篇主要为Python中类的私有属性内容。

目录

场景

类私有属性

设置私有属性

访问私有属性

私有属性赋值

私有属性对比

私有属性说明

操作私有属性

__属性__

_属性

总结


场景

所有的变量都可被外部调用和修改,这样是不安全的。怎么解决呢?设置类的私有属性。

类私有属性

如果要让类的内部属性不被外部直接访问,可以通过在属性前增加两个下划线:”__属性”。

在python中如果在属性前加两个下划线,就表示这个属性变成了私有属性。

设置私有属性

对Person类增加一个money属性,然后实例化类并打印money属性。

示例如下:

class Person(object):
    name = ''
    age = 0
    gender = 0
    height = 0
    weight = 0
    __money = 1000

 

访问私有属性

示例如下:

person1 = Person()
print(person1.__money)

执行结果:

Traceback (most recent call last):
  File "E:\lianxipy\day6\访问限制.py", line 12, in <module>
    print(person1.__money)
AttributeError: 'Person' object has no attribute '__money'

外部已经无法访问了,提示:对象中没有这个属性。

私有属性赋值

如果我们在实例化对象后,首先给私有属性赋值,再访问就发现一个奇妙的事情:

这时候能访问私有属性了。

示例如下:

person1 = Person()
person1.__money = 10
print(person1.__money)

# 执行结果
# 10

私有属性对比

但其实我们访问的是对象设置的__money属性,并不是类的私有属性。

可通过在__init__()中打印类私有属性值与外部赋值的进行对比,发现确实如此。

示例如下:

class Person(object):
    name = ''
    age = 0
    gender = 0
    height = 0
    weight = 0
    __money = 1000

    def __init__(self):
        print(self.__money)

person1 = Person()
person1.__money = 10
print(person1.__money)

# 执行结果:
# 1000
# 10

私有属性说明

Python的类私有属性并不是真正的无法访问了,只是它把变量改变了名称,通过这种方式把私有属性隐藏起来使外部无法直接访问。

这时候可以通过”_类名__属性”的方式进行访问,不建议用这种方式直接访问,因为不同的解释器变量名称可能不同。再说本来就设置成私有属性,如果还是直接访问岂不是多此一举。

在这里只是为了了解python私有属性的特性。

示例如下:

person1 = Person()
print(person1._Person__money)

# 执行结果
# 1000

查看执行结果,已经访问到刚才设置的私有属性值。

操作私有属性

当前外部无法直接访问和设置私有属性值,

通过自定义内部的方法实现对私有属性的赋值和取值。

示例如下:

# 获取类私有属性
print(person1.get_money())
# 设置类私有属性
person1.set_money(100)
# 在获取类私有属性
print(person1.get_money())

# 执行结果
# 1000
# 100

__属性__

在python中__xxx__属于特殊变量,可以直接访问。

但是按照约定规则,请把它当做私有变量不要直接访问。

示例如下:

class Person(object):
    name = ''
    __age__ = 0
    gender = 0
    height = 0
    weight = 0
    __money = 1000
person1 = Person()
print(person1.__age__)

 

_属性

在python中_xxx变量,这样的实力变量外部可以直接访问,意为受保护的属性。

编译器中不提示类有此属性,且有受保护提示。

示例如下:

class Person(object):
    name = ''
    __age__ = 0
    _gender = 0
    height = 0
    weight = 0
    __money = 1000

person1 = Person()
print(person1._gender)

当打印时提示:

Access to a protected member _gender of a class

总结

本篇主要为Python中类的私有属性内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值