python中, 私有属性和方法, 默认是不能被子类访问的
class A:
def __init__(self):
self.num1 = 100
self.__num2 = 200 #私有属性
def __test(self):
print("私有方法"+str(self.num1)+str(self.__num2))
class B(A):
def demo(self):
#在子类方法中, 也不能使用self.父类私有属性/方法名
#print(str(self.__number2)
#很残酷的是, 即使是super().父类私有属性/方法也不可以
super().__test()
pass
b = B() #创建一个子类
print(b)
#无法使用对象名.父类私有属性方法
#print(b.__num2)
#b.__test()
但是, 使用父类共有的方法, 访问父类的私有属性(getter and setter)或方法(不常用)
通常来说, 属性都是私有的, 也往往通过getter 和 setter获取和修改属性
class A:
def __init__(self):
self.num1 = 100
self.__num2 = 200 # 私有属性
def get_num2(self):
return self.__num2
def set_num2(self, num2):
self.__num2=num2
class B(A):
pass
b = B() # 创建一个子类
b.set_num2(50) #修改父类对象私有属性
print(b.get_num2())
在这里,解答一个疑惑,修改了父类对象的值,这是怎么回事?
在继承机制中,子类对象在创建时,并不仅仅是子类对象,而是包含了多个父类对象的大对象,也就是在实例化子类对象实,会同时实例化父类对象,这里修改的父类对象属性,其实不会影响其他对象(方法的重写也是如此)