python 面向对象(二)继承 多态 反射

1.单继承,基类和派生类中都存在,调用的时候优先在派生类中寻找

2.多继承,两个父类都有的方法,子类对象进行调用的时候,从左到右进行调用 :child(father,mother)  

3.多重继承查找顺序

先从E里面找,找不到,去C里面找,找不到,去A里面找,找不到,去D里面找,找不到,去B里面找

先从E里面找,找不到,去C里面找,找不到,去A里面找,找不到,去D里面找,找不到,去B里面找,找不到去,o里面找

4.多态

 其他语言中,函数传递参数的时候,必须指定参数的类型,要传递某一个对象,参数必须是这个对象的类,或者这个对象的类的基类。

 Python中本身支持多态,参数是任意类型

 扩展:

  重载,函数名相同,参数的个数不同(Python不支持)

  重写,派生类中重新实现基类中的方法

      接口,其他语言中,定义了接口,实现这个接口时,应该对每一个方法进行重写,接口起到约束的作用 (Python 不支持)

5.执行父类的构造方法

class animal(object):
    def __init__(self):
        print('animal init func')
class maoke(object):
    def __init__(self):
        print('maoke init func')

class cat(animal,maoke):
    def __init__(self):
        super(cat,self).__init__() # 推荐使用这一种 执行父类的构造方法
        # animal.__init__(self) #另一种执行父类的构造方法
        print('cat init func')

c = cat()

第一种,还是按照多继承的查找方式 来查找__init__方法,第二种,比较自由,但是很乱

5.反射

  反射 类,只能找类的成员

  反射 对象,即可找对象的封装的成员,也可找类中的成员

6.利用反射,导入模块,查找类,生成对象,找到属性

#导入模块
mod = __import__('classdir.s1',fromlist=True) #如果含有嵌套要添加fromlist
#从模块中找类
f_class = getattr(mod,'Foo')
#根据类创建对象
obj = f_class('dog')
#去对象中找属性
ret = getattr(obj,'name')
print(ret)

 

posted @ 2017-04-30 09:05  1916  阅读(184)  评论(0)    收藏  举报