python如何私有化并调用私有化的方法

在Python类的方法名前面加双下划线(__)可以让该方法在外部不可访问。

class Student:

    #student1方法可以在类的外部访问
    def student1(self):
        print("student1")
    #__student2方法不可以在类的外部访问
    def __student2(self):
        print("student2")

p = Student()
p.student1()
p.__student2     #会报错

执行上述代码,会抛出以下信息:

student1
Traceback (most recent call last):
  File "D:\软件脚本\python脚本\04.py", line 20, in <module>
    p.__student2     #会报错
AttributeError: 'Student' object has no attribute '__student2'

其实“student2”方法也不是绝对不可访问。Python编译器在编译Python源代码时并没有将“student2”方法真正私有化,而是一旦遇到方法名以双下划线(__)开头的方法,就会将方法名改成“ClassNamemethodName”的形式。其中ClassName表示该方法所在的类名,“methodName”表示方法名。ClassName前面要加上但单下划线()前缀。

对于上面的代码,Python编译器会将“student2”方法更名为“_Studentstudent2”,所以在类的外部调用“student2”方法会抛出异常。抛出异常的原因并不是“student2”方法被私有化了,而是Python编译器把“method2”的名称改为“_Personmethod2”了。当我们了解了这些背后的原理,就可以通过调用“_Studentstudent2”方法来执行“student2”方法

p = Student()
p.student1()
p._Student__student2()

此时,变成功调用student2了,

student1
student2

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值