当前位置: Python基础教程 > 07-面向对象a > 阅读正文

python的getter, setter

2021.6.21.   394 次   753字

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())

在这里,解答一个疑惑,修改了父类对象的值,这是怎么回事?

在继承机制中,子类对象在创建时,并不仅仅是子类对象,而是包含了多个父类对象的大对象,也就是在实例化子类对象实,会同时实例化父类对象,这里修改的父类对象属性,其实不会影响其他对象(方法的重写也是如此)

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群