#封装
封装是指隐藏类的实现细节,让使用者不关心这些细节
封装的目的是让使用者通过尽可能少的方法(或属性)来操作对象
私有属性和方法:
以‘__’双下划线开头,不以双下划线结尾的标识符为私有成员,私有成员只能使用该类的方法进行访问和修改
私有属性如:__val
私有方法如:__val()
举个栗子:
# 私有属性和私有方法来实现封装
class A:
def __init__(self):
self.__p1 = 100 # p1为私有属性,只能是实例方法来使用
# self.__p2__ = 200 # 这不是私有属性
def show_info(self):
print(self.__p1) # 此对象的实例方法可以访问和修改私有属性
self.__m() # 调用私有方法
def __m(self):
print('A类对象的__m方法被调用')
a = A()
# print(a.__p1()) # 不允许方访问私有属性
a.show_info() # 100
# a.__m() # AttributeError: 'A' object has no attribute '__m'
#多态
多态是指在有派生/继承关系中,调用基类对象的方法,实际能调用子类的覆盖方法的现象叫多态
说明:
- 多态调用的方法与对象相关,和类型无关
- python只有动态,没有静态
class Shape:
def draw(self):
print('Shape的draw()方法被调用')
class Point(Shape):
def draw(self):
print('正在画一个点')
class Circle(Point):
def draw(self):
print('正在画一个圆')
def my_draw(s):
s.draw() # 显示出多态中的'多态'
s1 = Circle()
s2 = Point()
my_draw(s1)
my_draw(s2)