浅谈python面向对象之继承

     面向对象有两个重要部分类和对象,类是抽象的模板,而对象是这个类的实例。

类的一些概念:

     包括初始化方法__init__,可以理解为构造,self,理解为this。具体的使用方法在前面的文章中有介绍,这里不再详述。

继承:

      面向对象编程的优点是代码的复用,而继承就是实现代码复用的方法之一。继承完全可以理解成类之间的类型和子类型关系。需要注意的地方:继承语法   class 派生类名(基类名)://...   基类名写在括号里,基本类是在类定义的时候,在元组之中指明的。

继承的优点:如果需要定义几个类,而类与类之间有一些公共的属性和方法,这时就可以把相同的属性和方法作为基类的成员,而特殊的方法及属性则在本类中定义,这样只需要继承基类这个动作,就可以访问到基类的属性和方法了,它提高了代码的可扩展性。

继承的缺点:继承的一个缺点就是,可能特殊的本类又有其他特殊的地方,又会定义一个类,其下也可能再定义类,这样就会造成继承的那条线越来越长,使用继承的话,任何一点小的变化也需要重新定义一个类,很容易引起类的爆炸式增长,产生一大堆有着细微不同的子类. 所以尽可能遵守“多用组合少用继承”的原则。

python中继承中的一些特点:

1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。

2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数

3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找,即先在本类中查找调用的方法,找不到才去基类中找。

如果在继承元组中列了一个以上的类,那么它就被称作“多重继承” 。

例子:创建一个父类(Person),再创建两个子类(Student和Worker),子类继承父类的一些属性和方法。

class Person(object):
    def __init__(self,name,age,money):
        self.name = name
        self.age = age
        self.__money = money
    def setMoney(self,money):
        self.__money = money
    def getMoney(self):
        return self.__money

    def run(self):
        print('run')
    def eat(self,food):
        print('eat'+'food')

class Student(Person):
    def __init__(self,name,age,money,stuId):
        #调用父类中的__init__
        super(Student,self).__init__(name,age,money)
        #子类可以有一些自己独特的属性
        self.stuId = stuId
    def stuFunc(self):
        print(self.__money)

class Worker(Person):
    def __init__(self,name,age,money):
        #调用父类中的__init__
        super(Worker,self).__init__(name,age,money)

per = Person('name',2,9)
stu = Student('tom',18,1000,20180101006)
print(stu.name,stu.age)
stu.run()
print(stu.stuId)
#print(stu.__money)通过继承过来的共有方法访问私有属性
#stu.stuFunc()私有属性
print(stu.getMoney())

wor = Worker('lilei',19,200)
print(wor.name,wor.age)
wor.eat("apple")
print(per.getMoney())

输出:

tom 18
run
20180101006
1000
lilei 19
eat food
100

私有属性的访问方法:

例子中的 __money就是私有属性,需要用set,get方法进行访问。

此外还有多继承,将会在后续的文章中继续介绍。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值