美文网首页
python类的访问可见性问题

python类的访问可见性问题

作者: 以我丶之姓 | 来源:发表于2021-03-02 13:25 被阅读0次

在很多面向对象编程语言中,我们通常会将对象的属性设置为私有的(private)或受保护的(protected),简单的说就是不允许外界访问,而对象的方法通常都是公开的(public),因为公开的方法就是对象能够接受的消息。在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头。
但是,Python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来妨碍对它们的访问,事实上如果你知道更换名字的规则仍然可以访问到它们,下面的代码就可以验证这一点。之所以这样设定,可以用这样一句名言加以解释,就是"We are all consenting adults here"。因为绝大多数程序员都认为开放比封闭要好,而且程序员要自己为自己的行为负责。

class Test:
    def __init__(self, name, age):
        #name为公开
        self.name = name
        #__age 为私有
        self.__age = age
    def play_game(self):
        print('%s可以打游戏。'%(self.name))
    
    def __study(self):
        print('这是在__study函数下打印的')
        print('#'*10)
        print('年龄是:',self.__age)

test = Test('张三', 18)
test.play_game()
print(test.name)
#print(test.__age) # 报错AttributeError: 'Test' object has no attribute '__age'
print(test._Test__age) #可以访问到 18
#test.__study() #AttributeError: 'Test' object has no attribute '__study'
test._Test__study() #可以访问到

在实际开发中,我们并不建议将属性设置为私有的,因为这会导致子类无法访问(后面会讲到)。所以大多数Python程序员会遵循一种命名惯例就是让属性名以单下划线开头来表示属性是受保护的,本类之外的代码在访问这样的属性时应该要保持慎重。这种做法并不是语法上的规则,单下划线开头的属性和方法外界仍然是可以访问的,所以更多的时候它是一种暗示或隐喻。

相关文章

  • python类的访问可见性问题

    在很多面向对象编程语言中,我们通常会将对象的属性设置为私有的(private)或受保护的(protected),简...

  • 并发编程-简单了解

    1.三个问题:原子性问题,可见性问题,有序性问题 原子性:要么全部执行,要么全部不执行 可见性:当多线程访问同一个...

  • 【再读Java并发编程】对象的共享

    并发的两层作用:1 多线程互斥访问;2 内存可见性;示例一:没有并发保护的可见性问题。 *JMM 重排序*在没有同...

  • Java修饰符

    一.访问控制修饰符 四种不同的访问权限:(可见性依次降低) public:对所有类可见,使用对象:变量,方法,接口...

  • python面向对象2

    1.权限访问: 2.python中类的内容的访问权限 严格来说,python类中的内容只有公开的;私有化是假的私有...

  • java 中访问权限控制

    修饰类 默认访问权限(包访问权限):用来修饰类的话,表示该类只对同一个包中的其他类可见。。 public:用来修饰...

  • 互斥锁,解决原子性问题

    并发编程有3个源头性问题:缓存导致的可见性问题,编译优化导致的有序性问题,以及线程切换导致的原子性问题。解决可见性...

  • python继承机制和Minxin模式

    python继承和访问父类和super python通过在类方法名旁边声明(父类名)来继承父类子类可以通过父类名....

  • 214字段与属性——为什么要使用字段/属性

    1、访问修饰符 作用:限制对象的属性或方法可访问的范围(类的内部、类的外部) 类型:private(私有的,不可见...

  • 01 并发编程的问题根源

    问题根源: 1. 可见性问题:多核 CPU 缓存导致 由于硬件之间访问速度的差异,CPU 会从内存中读取数据并缓存...

网友评论

      本文标题:python类的访问可见性问题

      本文链接:https://www.haomeiwen.com/subject/ffstqltx.html