封装 enclosure 多态polymorphic 函数重写cverwrite 以及对象管理函数
封装 enclosure
封装是指隐藏类的实现细节,让使用者不关心这些细节
封装的目的是让使用者通过 尽可能少的方法(或属性)操作对象
私有属性和方法
python类中,以双下划线('__')开关,不以双下划线结尾的标识符为私有成员,私有成员只能使用该类的方法来进行访问和修改
1,以__开关的属性为私有属性
2,以 __开关的方法为私有方法
多态
字面意思:‘多种状态'
多态是指在有继承/派生关系的类中,调用基类对象的方法,实际能调用子类的覆盖方法的现象叫多态
状态
静态(编译时状态)
动态 (运行时状态)
说明
多态调用的方法与对象相关,不写类型相关
python全部对象都只有‘运行时状态(动态)’
没有‘C++语言’里的编译时状态(静态)
#动态 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)
面向对象编程语言的特征:
继承
封装
多态
多继承 multiple inheritance
多继承是指一个子类继承自两个或两个以上的基类
语法
class 类名(基类1,基类2...)
说明
一个子类同时继承自多个父类,父类中的方法可以同时被继承下来如果两个父类中有同名的方法,而在子类中又没有覆盖此方法时,调用结果难以确定
多继承的问题(缺陷)
标识符冲突问题
(谨慎使用多继承)
多继承的MRO(method Resolution Order)问题
python3的类的__mro__属性
作用:用来记录类的方法
函数重写
什么是函数重写
在自定义的类内添加相应的方法,让自定义的类创建的实例能够使用内建函数进行操作
对象转字符串函数
repr(x) 返回一个能表示python对象的表达式字符串,通常
eval(repr(obj))==obj
str(x) 通过给定的对象返回一个字符串(这个字符串通常供人阅读)
示例
s="I'm Teacher"
对象转字符串函数的重写方法:
repr() 函数的重写方法:
def __repr__(self): #此方法返回来的字符串一定是能表示self对象的表达式字符串
return 字符串
str() 函数的重写方法:
def __str__(self):
return 字符串
str(obj)函数调用方法说明:
1.str(obj)函数先查找obj.__str__(方法)
调用此方法并返回结果
2.如果obj.__str__()
方法不存在,则调用obj.__repr__方法并返回结果
3.如果obj.__repr__方法不存在,则调用
object类的__repr__实例方法显示<__main___.xxx object at 0xXXXXX>格式的字符串
对象的属性管理函数
getattr(obj,name[,default])
从一个对象用字符串name得到对象的属性,getattr(x,'y')等同于x,y,当属性不存在时,如果给定default参数则返回default,如果没有给出default,则触发一个AttributeError错误
hasattr(obj,name)
用给定的name字符串返回obj是否有此属性,此种做法可以避免在getattr(obj,name)时引发错误
setattr(obj,name,value)
给对象obj的名为name的属性设置相应的值value,setattr(x,'y',v),等同于,x-y=v
delattr(obj,name)删除对象obj中的name属性 del(x,'y')等同于del x,y
---恢复内容结束---
不是所有的成功都是坐享其成,联系作者v(13147256756)

浙公网安备 33010602011771号