内容:

  • 1.接口思想
  • 2.抽象类思想
  • 3.多态
  • 4.内置方法
  • 5.反射

1.接口思想

建立关联的桥梁,方便管理代码
接口类:用来定义功能的类,位继承它的子类提供功能
该类的功能方法一般不需要实现体,实现体由继承它的子类自己实现

2. 抽象类思想

抽象父类:拥有抽象方法(子类共有的方法,但是父类不能有具体的实现体)的父类
抽象方法:方法名是具体的,但实现体是抽象的(在子类中重写来具象化)

3. 多态

3.1 什么是多态
多态指的是同一种/类事物的不同形态
3.2 为何要用多态
多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象
多态性的精髓:统一多态的体现:功能或需求,需要父类的对象,可传入父类对象或任意子类对象均可
有抽象方法的父类,无法实例化
常见的多态及其带来的好处:
python中多种数据类型:字符串、列表、字典、元组等,都拥有通用的使用方法
例如:
"""
"""s = 'hello'
l = [1, 2, 3, 4]
t = (1, 2, 54, 4)# 不同类型的数据都可以使用
print(len(s))
print(len(l))
print(len(t))# 内部使用的就是多态的思想
s1 = s.__len__()
l1 = l.__len__()
t1 = t.__len__()print(s1)
print(l1)
print(t1)
3.3 鸭子类型
1.规定有什么属性及什么方法的对象叫鸭子
2.能提供出规定的属性与方法的对象就是鸭子解释2:(抽象的思想) 两个类没有继承同一个类(都不继承类),但是二者含有相同的功能,就称这两个类是鸭子类型“这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。””
# 二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用
class TxtFile:def read(self):passdef write(self):passclass DiskFile:def read(self):passdef write(self):pass

4.内置方法

4.1 isinstance(obj, cls) 和 issubclass(sub, super)
# isinstance(obj, cls) 检查 obj 是否是类 cls 的对象class Foo(object):pass
obj = Foo()isinstance(obj, cls)# issubclass(sub, supper) 检查 sub 类是否是 super 类的派生类class Foo(object):pass
class Bar(Foo):pass
issubclass(Bar, Foo)
4.2 str
在对象被打印时自动触发,可以用来定义对象被打印时的输出信息# 注意:必须返回一个字符串类型的值,class People:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):# print('run..........')return '<name:%s age:%s>' % (self.name, self.age)obj1 = People('zhangsan', 18)
print(obj1)  # print(obj1.__str__())obj2=list([1,2,3])
print(obj2)
4.3 del
在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源class Foo:def __init__(self, x, filepath, encoding='utf-8'):self.x = xself.f = open(filepath, 'rt', encoding=encoding)def __del__(self):print('run.....')# 回收对象关联的其他资源self.f.close()obj = Foo(1, 'a.txt')
# del obj
print('主===========>')
4.4 call
在对象被调用时会自动触发该方法,可以用来???
class Foo:def __init__(self, x, y):self.x = xself.y = ydef __call__(self, *args, **kwargs):print(self, args, kwargs)print("----------------------------------")obj = Foo(1, 2)
obj(1, 2, a=3, b=4)  # obj.__call__(obj,1,2,a=3,b=4)

5. 反射:通过字符串来反射/映射到对象/类的属性上

hasattr()
getattr()
setattr()
delattr()class People:def __init__(self, name, age):self.name = nameself.age = agedef run(self):print('%s is running' % self.name)obj = People('lisi', 18)
print(obj.__dict__)  # {'age': 18, 'name': 'lisi'}print(hasattr(obj, 'name'))  # 'name' in obj.__dict__
print(getattr(obj, 'name'))  # obj.__dict__['name']
print(getattr(obj, 'xxx', '没找到啊'))  # obj.__dict__['xxx']
# 没有这个属性,会报错, 第三个参数为默认值,当找不到的时候,返回第三个参数内容delattr(obj, 'name')
print(obj.__dict__)  # {'age': 18}

转载于:https://www.cnblogs.com/xt12321/p/10750969.html

python 面向对象_多态、内置方法、反射相关推荐

  1. python 面向对象 类的内置方法

    判断是不是类cls的对象 class A:passa = A() print(isinstance(a,A)) 判断类sub是不是super的子类 class A:passclass B(A):pas ...

  2. Python中常用的内置方法

    Python中常用的内置方法: 比较大小.求和 如下所示: 代码块: #枚举:返回索引值和对应的value值for i,v in enumerate('westos'):print(i,v)#zips ...

  3. python中字典类型中的item是什么-python中 字典类型内置方法

    python中 字典类型内置方法 一.字典(dict) ​ 1·. 存多个值,但是每一个值都有一个key与之对应.列如存在值有姓名:jiayi.年龄:18.身高:173 ​ 2.定义方式 ​ 在{}内 ...

  4. python 类调用不存在的方法_[python] 类常用的内置方法

    内置方法 说明 __init__(self,...) 初始化对象,在创建新对象时调用 __del__(self) 释放对象,在对象被删除之前调用 __new__(cls,*args,**kwd) 实例 ...

  5. python 类的内置方法_【转】[python] 类常用的内置方法

    原文:http://xukaizijian.blog.163.com/blog/static/170433119201111894228877/ 内置方法 说明 __init__(self,...) ...

  6. python字典内置方法_柳小白Python学习笔记 12 内置方法之字典方法

    学习字典的时候只学习了最基本的字典定义和创建方式.今天再学习两种字典的创建方法及字典内置方法的使用. 现在春暖花开,所以我用花的元素创建了garden(花园)系列字典,字典的键是flowers(花名) ...

  7. Python之路(第二十七篇) 面向对象进阶:内置方法、描述符

    一.__call__ 对象后面加括号,触发执行类下面的__call__方法. 创建对象时,对象 = 类名() :而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()( ...

  8. python pandas str列内置方法

    pandas的DataFrame,有时需要处理一些字符串类型列,运用Series.str列内置方法很方便. 1.one hot 独热编码,get_dummies series=data['列名'].s ...

  9. 基石为勤能补拙的迷宫之旅——第五天(Python基本数据类型及内置方法)

    一.数据可变不可变类型 可变类型:值改变,但是id不变,证明就是在改变原值,是可变类型 l = ['a', 'b'] print(id(l)) l[0] = 'A' print(l) print(id ...

最新文章

  1. 字符串的模式匹配,KMP算法
  2. python 决策树和随机森林_【python机器学习笔记】使用决策树和随机森林预测糖尿病...
  3. cesium js 路径_Cesium开发学习路径
  4. 基于水色图像的水质评价
  5. linux删除之前的文件日志
  6. mysql把select结果存到变量中_mysql实例 select into保存到变量的例子
  7. mysql报错last packet_mysql The last packet successfully received
  8. SpringCloud Eureka参数配置项详解
  9. 华为P50系列下月见:珍惜,备货量前所未有的少...
  10. 为什么新技术产品经常出问题,以及如何在您的公司中防止它
  11. Python 函数的参数形式
  12. LeetCode-179:数组自动排序工具Arrays.sort(),比较器Comparator的正确打开方式
  13. Smart ORM v0.4.1开发计划
  14. nginx+php配置
  15. 微信小程序之获取当前位置附近的美食、酒店、娱乐、超市等,并显示标记
  16. 使用函数求最大公约数 pta_13个数学函数应用技巧解读,易学易懂,远离数学计算困扰...
  17. Docker 4.2:Docker 公有镜像仓库 - 阿里云容器镜像服务
  18. 埃里克贝里奇_未来公司客服的标配?苹果Watch智能手表开启新时代
  19. Oracle X$BH
  20. rsyslog服务搭建

热门文章

  1. [转]小程序web-view组件
  2. python实现图灵机器人帮你回复微信好友消息
  3. mysql5.7 mysql库下面的user表没有password字段无法修改密码
  4. bzoj4558[JLoi2016]方 容斥+count
  5. python3--多目录之间的协作的一些必备知识
  6. java设计模式—工厂模式
  7. HDU2191——悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
  8. 大数据_Flink_数据处理_命令行提交Job---Flink工作笔记0014
  9. mysql数据库导入导出_windows系统以及linux系统下的操作---linux工作笔记042
  10. AndroidStudio_开发工具_调试功能---Android原生开发工作笔记75