Python中的面向对象(高级)之私有方法、多继承、多态

Python018

Python中的面向对象(高级)之私有方法、多继承、多态,第1张

特征:私有属性与私有方法不能从外部被调用,也不能被子类继承

唯一写法:在属性或方法前面加上__(两个下划线)

我们写一个简单的例子,创建一个类,包含私有方法、私有属性、普通方法、普通属性,并生成一个实例

私有属性和私有方法可以从内部被调用(总不能我写了,但是哪都不让用吧)

我们试试在类里再加入一个新的方法,调用私有方法和属性

可以看到,私有属性和私有方法是可以在类内部被调用的。

举个私有属性应用场景的例子

二。object类

我们试一下

三。多继承

一个子类可以继承多个父类,用逗号隔开

多个父类中有同名方法时,按照继承顺序进行调用

四。多态

当不同的实例,有同名的方法时,我们可以一个函数,传入不同的实例,执行对应的方法。

我们定义一个猫和一个狗的类,两个类中都有'叫'的方法。并各生成一个实例。

定义一个函数,用函数来调用'叫'的方法

这就叫多态。

在Python中,通过在属性名称前面添加两个下划线(__)来声明该属性为私有属性。例如:

class MyClass:

def __init__(self):

self.__private_attribute = 0

def set_private_attribute(self, value):

self.__private_attribute = value

def get_private_attribute(self):

return self.__private_attribute

-----------------------------------end----------------------------------

在这个例子中,__private_attribute 属性是私有属性,无法在类外部直接访问。你只能通过 set_private_attribute 和 get_private_attribute 方法来访问它。

在Python中,私有属性不能直接访问,但是它们可以被访问。如果你真的想要阻止类外部的访问,可以将属性名称改为一个不常用的名称,比如以一个下划线开头(例如,_private_attribute)。这样做会提醒其他程序员这个属性是私有的,但是并不会阻止类外部的访问。

还有其他问题吗?

>>>class Template():

def ___haha():

pass

>>>t=Template()

>>>dir(t)

['_Template___haha', '__doc__', '__myodule__']

当方法以__开头后,会认为它是一个私有的方法,外部不能调用,其实是因为python帮我们改名了,如上所式的___haha方法变成了

_+类名+原方法名的形式