python中的多态
面向对象的三大特征: 封装、继承、多态
一:封装
封装的内容包括两部分:封装数据和封装函数
封装数据:保护隐私(这一类数据只有这种类才能使用)
封装函数:降低复杂度,这和面向过程的编程中的作用一样。
封装的含义也包括两个层面:
一:将数据和函数封装在类里面本身就是一种封装;
二:将数据完全封装在方法中,即不同通过类的外部直接访问数据,而必须通过类的方法进行方法。
class Person:
__name = "bob"
a = Person()
print(a.__name) ###这是访问不到的,会报错
封装属性和方法
class Person: ###封装属性
__name = "bob"
def myfun(self):
print(self.__name) #这是正确的调用方式
a = Person()
a.myfun()
class Person: ###封装方法
__name = "bob"
def __myfun(self):
print(self.__name)
def pubfun(self):
self.__myfun()
a = Person()
a.pubfun()
python没有完全真正的封装
通过增加一个下划线和类名的方式调用封装的属性和方法
class Person:
__name = "bob"
def __myfun(self):
print(self.__name)
def pubfun(self):
self.__myfun()
a = Person()
print(a._Person__name)
a._Person__myfun()
二、继承
一、子类会继承父类的所有信息,除非子类对父类的信息进行了重写
二、子类与父类中相同的属性使用的是同一块内存空间,即子类对父类的属性进行了重写
class Person:
name = "bob"
def get(self):
print(id(self.name))
class Student(Person):
name = "jack"
def getstu(self):
print(id(self.name))
b = Student()
b.get()
b.getstu()
52215624
52215624
三、多态
即,程序并不知道自己要执行的是什么类型的操作,也能够执行。程序在执行过程中会根据具体情况选择执行的代码。
class Person:
name = "bob"
def pri(self):
print(self.name)
class Student(Person):
name = "jack"
def pri(self):
print(self.name)
a = Person()
b = Student()
def myfun(x):
x.pri()
myfun(a)
myfun(b)
名称
属性—数据—成员变量
函数—方法—成员函数