python基础知识(八)面向对象----(二)

(八)面向对象----(二)

目录

(八)面向对象----(二)

面向对象的三大特性----继承

8.1继承

8.2单继承和多继承

8.3继承与重用性

8.4派生

8.5钻石继承

8.6抽象类与接口类



面向对象的三大特性----继承

8.1继承

一个类继承另一个类时,他将自动获得另一个类的所有属性和方法。

原有的类称为父类,或基类,超类

新生类称为子类,或派生类

8.2单继承和多继承

     a.一个类 可以被多个类继承

     b.一个类 可以继承多个父类

__bases__可以查找子类的父类,特例:没有继承父类,默认继承object,我们称为新式类

class A(object):pass   # 父类
class B:pass 
class A_son(A,B):pass # 子类
class AB_son(A):pass 

print(A_son.__bases__)
print(AB_son.__bases__)
print(A.__bases__)

'''
(<class '__main__.A'>, <class '__main__.B'>)
(<class '__main__.A'>,)
(<class 'object'>,)
'''

8.3继承与重用性

创建两个对象一个Dog一个Cat

class Dog():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def sit(self):
        print(self.name.title() + 'is now sitting')
class Cat():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def climb(self):
        print(self.name.title() + 'is now climbing')

我们发现有需多重复代码,使用继承的思想

class Animal:
    def __init__(self,name,age):
        self.name = name
        self.age = age
class Dog(Animal):
    def sit(self):
        print(self.name.title() + ' is now sitting')
class Cat(Animal):
    def climb(self):
        print(self.name.title() + ' is now climbing')
dog = Dog('dog',2)
cat = Cat('cat',1)
print(dog.name)
print(cat.name)
'''
dog
cat
'''

8.4派生

父类中没有的属性 在子类中出现 叫做派生属性

父类中没有的方法 在子类中出现 叫做派生方法

只要是子类的对象调用,子类中有的名字 一定用子类的,子类中没有才找父类的,如果父类也没有就报错

如果父类 子类都有 用子类的  

如果还想用父类的,单独调用父类的:

                   a.父类名.方法名 需要自己传self参数

                   b.super().方法名 不需要自己传self

派生属性:

class Animal:
    def __init__(self,name,age):
        self.name = name
        self.age = age
class Dog(Animal):
    def __init__(self,name,age,kind):
        Animal.__init__(self,name,age)
        self.kind = kind
 
dog = Dog('dog',2,'big dog')
print(dog.kind)
print(dog.name)
#big dog
#dog

派生方法:

class Animal:
    def __init__(self,name,age):
        self.name = name
        self.age = age
class Dog(Animal):
    def sit(self):
        print(self.name.title() + ' is now sitting')
dog = Dog('dog',2)
dog.sit()
#Dog is now sitting

只要是子类的对象调用,子类中有的名字 一定用子类的,子类中没有才找父类的

class Animal:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say(self):
        print('我是动物')
class Dog(Animal):
    def sit(self):
        print(self.name.title() + ' is now sitting')
    def say(self):
        print('我是狗')
dog.say()
#我是狗

如果还想用父类的,单独调用父类的

class Animal:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say(self):
        print('我是动物')
class Dog(Animal):
    def __init__(self,name,age,kind):
        Animal.__init__(self,name,age)
        self.kind = kind
    def sit(self):
        print(self.name.title() + ' is now sitting')
    def say(self):
        Animal.say(self)      #父类名.方法名 需要自己传self参数
        print('我是狗')
dog = Dog('dog',2,'big dog')
dog.say()
'''
我是动物
我是狗
'''

在python3中,子类执行父类的方法也可以直接用super方法

class Animal:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say(self):
        print('我是动物')
class Dog(Animal):
    def __init__(self,name,age,kind):
        super(Dog, self).__init__(name,age) #super().__init__() 不需要自己传self
        self.kind = kind
    def sit(self):
        print(self.name.title() + ' is now sitting')
    def say(self):
        super(Dog, self).say()          #super().方法名 不需要自己传self
        print('我是狗')
dog = Dog('dog',2,'big dog')
print(dog.kind)
print(dog.name)
dog.say()

8.5钻石继承

相关连接:https://blog.csdn.net/zeroooorez/article/details/89527189

8.6抽象类与接口类

相关链接:https://blog.csdn.net/zeroooorez/article/details/89532827

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值