Python 学习笔记 - 面向对象(其他)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 学习笔记 - 面向对象(其他)相关的知识,希望对你有一定的参考价值。
这是面向对象的最后一个部分。
首先看两个函数。
1.isinstance(obj, cls)
检查是否obj是否是类 cls 的对象
2.issubclass(sub, super)
检查sub类是否是 super 类的派生类
class Bar: pass class Foo(Bar): pass obj = Foo() # obj,Bar(obj类型和obj类型的父类)的实例 ret = isinstance(obj, Bar) print(ret) ret = issubclass(Bar,Foo) print(ret) ------------------ True False
3.super
默认情况下,当子类和父类有同名的方法时候,子类的对象调用这个方法是调用的子类的方法。super可以强制调用父类的方法。
比如说
class C1: def f1(self): print(‘c1.f1‘) return 123 class C2(C1): def f1(self): # 主动执行父类的f1方法 ret = super(C2,self).f1() print(‘c2.f1‘) return ret obj = C2() m=obj.f1() print(m) ----------- c1.f1 c2.f1 123
这种方式使得我们可以灵活地扩展现有的类,增加新的功能,而不需要去修改现有的代码。相对应的,如果使用装饰器的话 我们需要去修改原有的代码。
比如,通过super的方式自定义一个有序的字典,基本思路是把key放在一个列表里面,因为列表是有序的,因此我们取值的时候通过列表取到key,然后再通过key取到对应的value,最后重新拼接一下输出
class MyDict(dict): def __init__(self): self.li = [] super(MyDict,self).__init__() def __setitem__(self, key, value): self.li.append(key) super(MyDict,self).__setitem__(key,value) def __str__(self): temp_list = [] for key in self.li: value = self.get(key) temp_list.append("‘%s‘:%s" %(key,value,)) temp_str = "{" + ",".join(temp_list) + "}" return temp_str # obj = MyDict() obj[‘k1‘] = 123 obj[‘k2‘] = 456 print(obj)
本文出自 “麻婆豆腐” 博客,谢绝转载!
以上是关于Python 学习笔记 - 面向对象(其他)的主要内容,如果未能解决你的问题,请参考以下文章