python 私有属性的用途_# python 类(class)3 私有属性/方法

python 类(class)3 私有属性/方法

前言

本来想做成一个系列,后来感觉,写太多重复的东西反而有可能会影响阅读体验.

努力将教程写的简单,易懂,有实用价值.启发对内容的思考.

初稿就先这样将就着先吧.改天等一套内容写的差不多了,再重新整理一下吧.

每次回头看自己写的东西,都有点惨不忍睹的感觉.

本来就是因为看别人的教程感觉不是很符合一个读者,一个学习者的逻辑,所以想要将所学,尽可能写成易读易懂的样子.

慢慢努力吧

内容提要

类中的__变量

类中的__变量

python中,在类的定义中在变量名前加双下划线的变量,称为类的私有属性,其本意是不让类的实例访问变量

class MyClass(object):

def __init__(self):

self.__name = "我是一个私有属性,实例无法直接访问"

mc = MyClass()

print(mc.__name)

[图片上传失败...(image-bdadfd-1611238228547)]

可以看到,__name虽然看上去像是一个属性(定义在方法内,且用self.的方式声明的变量),但是在实际的应用中,我们却无法用mc.__name方式直接读取该值.

这样就起到了保护__name属性的作用.

但是这种保护是相对的,不是绝对的.与其他编程语言中的private 关键定义的属性不同,这种方法只是起到了一种形式上的保护.

我们可以用以下方法突破这种保护

示例:突然类的私有属性的访问限制

# coding: utf-8

# 作者:爱编程的章老师

# 创建:2021/1/21 下午9:34

# 邮箱:slxxf000@163.com

# 微信:slxxfl

# 微信公众号:A卫隆少儿编程

# 格言:给自己的生活增加一份向上的力,每都进步一点点

# 突然束缚. 类的私有属性的外在访问

class MyClass(object):

def __init__(self):

# 定义一个私有属性,不希望被外界随意访问

self.__name = "我是受保护变量,但我可以被特殊的方法访问"

mc = MyClass()

print(mc._MyClass__name)

[图片上传失败...(image-3e2caf-1611238228547)]

可以看到,我们确确实实的获取到了这个变量的值

不仅是可以访问,改变也是可以的

# 类的私有属性的外在改变 示例

class MyClass(object):

def __init__(self):

self.__name = "我是受保护变量,但我可以被特殊的方法访问"

mc = MyClass()

print(mc._MyClass__name) # 获取私有属性__name的值

mc._MyClass__name = "我也是可以被改变的" # 改变私有属性__name的值

print(mc._MyClass__name)

[图片上传失败...(image-71014f-1611238228547)]

私有属性不仅可以用在实例属性,也可以用在类属性上

# 类的私有属性

class MyClass(object):

# 定义一个私有类属性

__name = "我是受保护的类的属性,不可以直接访问"

def __init__(self):

self.name = ""

# 直接访问私有的类属性会报错

print(MyClass.__name)

[图片上传失败...(image-29b7ee-1611238228547)]

可以看到,直接访问私有类属性会报错

# 类的私有属性

class MyClass(object):

# 定义一个私有类属性

__name = "我是受保护的类的属性,不可以直接访问"

def __init__(self):

self.name = ""

# 直接访问私有的类属性会报错

mc = MyClass()

print(mc._MyClass__name)

[图片上传失败...(image-bcc147-1611238228547)]

可以看到,确实被我们在外面找到了私有的类属性

总结

当我们在类的定义中给属性名前加上双下划线(__)时,是希望将这些属性保护起来,不让外界直接访问这些属性.从而使代码更健康.当然,这样定义的属性,除了起保护作用之外,还对后续的内容起到影响.

除了属性可以变成私有的,方法也可以变成私有的,操作方法同上.不再展开.可以自行尝试

定义:

私有实例属性:

self.__属性名

私有类属性:

__属性名

突然访问的方法:

私有实例属性: 实例名.类名属性名

私有类属性: 实例名.类名属性名

私有实例方法: 实例名.类名_方法名()

与其他语言的私有属性与私有方法不同,python的作法是将类的私有属性与方法进行了改名,使得我们不能直接用变量定义时的方法来访问使用,但是如果能够找到对应的属性(方法)名,还是可以突破这个限制的.

但是,当我们看到这些有双下划线的变量(方法)时,不建议去操作这些,以免破坏代码的整体性,导致不可预料的后果.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值