码迷,mamicode.com
首页 > 编程语言 > 详细

Python 学习笔记 - 面向对象(其他)

时间:2016-10-06 00:59:34      阅读:228      评论:0      收藏:0      [点我收藏+]

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

标签:python   面向对象   

原文地址:http://beanxyz.blog.51cto.com/5570417/1858805

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!