很多同学在学习到类与实例的时候,都了解过私有属性与私有方法的概念.但是却不知道如何调用它们?今天就告诉大家如何调用私有属性与私有方法.
我们先定义一个类,里面有私有属性与私有方法
class Class1:
__str1 = 'abc' # 私有属性
str2 = 'def'
def __method1(self): # 私有方法
print('这是私有方法')
def method2(self):
print('这是一个普通方法')
其中__str1为类的私有属性,str2为非私有属性
__method1为私有方法,method2为非私有方法
私有和非私有怎么区分呢?在属性的前面加上__,就是私有属性,在方法的前面加上__,就是私有方法.
需要注意的是,如果前后都有__,则不是私有属性或私有方法,比如__init__,这个是初始化方法,不属于私有方法.
接下来创建一个子类Class2
class Class2(Class1):
pass
打印非私有属性,运行结果为def
print(Class2.str2)
打印私有属性
print(Class2.__str1)
提示没有这个属性
也就是说,私有属性无法被继承
之后实例化一个cls2作为Class2的实例,调用非私有方法method2
运行结果如下,说明method2可以被子类调用
调用私有方法__method1
cls2.__method1()
运行结果如下,说明__mehtod1不可以被子类调用
现在我们知道子类无法继承父类的私有属性或私有方法,那么类自身是否可以使用私有属性或私有方法呢?
实例化一个cls1作为Class1的实例
cls1 = Class1()
调用非私有属性,可以显示
print(cls1.str2)
调用私有属性,报错
然后试一下调用非私有方法method2
cls1.method2()
运行结果如下
调用私有方法__method1
cls1.__method1()
运行结果
从上面的运行结果判断出,私有属性与私有方法不可以被子类继承,也不可以被类的实例直接调用.
那么,有没有办法可以调用它们呢?
确实有.
刚才我们调用了非私有方法method2,现在我们把method2里的内容修改一下.
def method2(self):
print(self.__str1)
self.__method1()
此时我们再调用method2,运行结果如下
__str1与__method1调用成功
本期知识点小结:私有属性与私有方法不能被子类继承,也不能从外部被调用,当要调用私有属性与私有方法时,可以由内部的非私有方法调用私有属性与私有方法,之后外部调用非私有方法间接的调用私有属性与私有方法.