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