面向对象编程案例03---继承之高级部分

# -*- coding: utf-8 -*-
#python 27
#xiaodeng
#file:BaseModelTest.py #模块名
class BaseClass():
    def __init__(self,name,age):
        self.name=name
        self.age=age
        #print '__init__()'
    def speak(self,name):
        print 'base class is speak:%s'% self.name


if __name__=="__main__":
    b=BaseClass("xiaodeng",28)
    b.speak("python")
# -*- coding: utf-8 -*-
#python 27
#xiaodeng
#面向对象编程案例03---继承之高级部分
#http://www.cnblogs.com/Joans/archive/2012/11/09/2757368.html


#类和对象是面向对象编程的两个方面。类创建一个实例,对象就是这个类的实例
#初始化方法__init__可以理解为构造,有点类似于java的this


#继承:面向对象的编程带来的好处之一就是代码的重用,实现方法就是通过继承的机制


#语法:class 派生类名 (父类名):////


#python中继承的特点
'''
1、在继承中父类的构造方法不会被自动调用,需要在其他派生类中构造中亲自专门调用
2、在调用父类的方法时,需要加上父类的类名前缀,且需要带上self参数,
3、python总是需要先查找对象类型的方法,如果他不能在派生类中找到对应的方法,他才开始从基类中查找
'''


#定义子类
#api.py
import BaseModel
class SubClass(BaseModel.BaseClass):#注意这里的模块名.类名用法
    def __init__(self,name,age,salary):#添加一个salary参数
        BaseModel.BaseClass.__init__(self,name,age)#调用父类方法和属性
        self.salary=salary
        print 'salary:',self.salary

    def talk(self,name):
        BaseModel.BaseClass.speak(self,name)

if __name__=="__main__":
    s=SubClass("xiaodeng",28,'china')
    s.talk("Hu Bei")
    print '--'*20
    s.speak("python")#通过子类调用speak方法,他会先在子类中查找,找到则调用,否则会到父类中查找
    
        
'''
salary: china
base class is speak:xiaodeng
base class is speak:xiaodeng
'''