首页 > 代码库 > Python 学习笔记 - 面向对象(其他)

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 学习笔记 - 面向对象(其他)