python 成员修饰符(公有,私有)

Python中成员的修饰符就是指的是:公有、私有。

  • 公有,在任何地方都可以调用这个成员。
  • 私有,只有在类的内部才可以调用改成员(成员是以两个下划线开头,则表示该成员为私有)
class Foo:
    def __init__(self,name,age):
        self.__name = name
        self.age = age

    def get_data(self):
        return self.__name
    def get_age(self):
        return self.age
obj = Foo('haha',123)
print(obj.get_data())
print(obj.get_age())
print(obj.age)
print(obj.__name)#由于是私有成员,只能在类中进行访问

结果如下:

Traceback (most recent call last):
  File "D:/python/day3/私有成员.py", line 14, in <module>
    print(obj.__name)#由于是私有成员,只能在类中进行访问
AttributeError: 'Foo' object has no attribute '__name'
haha
123
123

私有成员无法通过实例化对象进行直接访问,只有通过类中方法进行使用访问(只能在类间方法进行调用使用)。

class Foo:
    def get_age(self):
        print('公有的get_age')

    def __get_data(self):
        print('私有的__get_data')

    def proxy(self):
        print('公有的proxy')
        self.__get_data() #通过类中其他方法调用私有方法
obj = Foo()
obj.get_age()
obj.proxy()

输出结果如下:

公有的get_age
公有的proxy
私有的__get_data

__get_data()无法通过类(实例化对象)来访问使用,只有类中其他方法进行调用访问

此外,值得注意的是:父类中的私有成员,子类无法继承。

# 父类中的私有成员,子类无法继承
class Base:
    def __data(self):
        print('base.__data')
    def num(self):
        print('base.num')
        self.__data()
class Foo(Base):
    def fun(self):
        self.num()
        self.__data()#不允许执行父类中的私有方法

a=Foo()
a.fun()

输出结果如下:

Traceback (most recent call last):
  File "D:/python/day3/继承2.py", line 14, in <module>
    a.fun()
  File "D:/python/day3/继承2.py", line 11, in fun
    self.__data()
AttributeError: 'Foo' object has no attribute '_Foo__data'
base.num
base.__data

Process finished with exit code 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值