【python学习笔记】面向对象之继承

本文详细介绍了Python面向对象编程中的继承概念,包括单继承和多继承,以及属性查找机制。同时讨论了派生类如何扩展和重定义属性。此外,文章还探讨了类的组合,用于实现类之间的关联和组件化。文中进一步阐述了接口和抽象类的作用,解释了归一化设计的重要性,并对比了抽象类与接口的区别。最后,简述了继承的实现原理和子类调用父类方法的方式。
摘要由CSDN通过智能技术生成

一.继承

概念:继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类

作用:子类会“”遗传”父类的属性,从而解决代码重用问题

#######猫和狗有大量相同的内容
'''
#伪代码如下:
class 猫:

    def 喵喵叫(self):
        print('喵喵叫')

    def 吃(self):
        pass

    def 喝(self):
        pass

    def 拉(self):
        pass

    def 撒(self):
        pass

class 狗:

    def 汪汪叫(self):
        print('喵喵叫')

    def 吃(self):
        pass

    def 喝(self):
        pass

    def 拉(self):
    	pass

    def 撒(self):
        pass
#######采用继承思想实现:将重复代码放到动物类中,猫狗继承动物类
#伪代码如下:
class 动物:

    def 吃(self):
        pass

    def 喝(self):
        pass

    def 拉(self):
        pass

    def 撒(self):
        pass

# 在类后面括号中写入另外一个类名,表示当前类继承另外一个类
class 猫(动物):

    def 喵喵叫(self):
        print('喵喵叫')
        
# 在类后面括号中写入另外一个类名,表示当前类继承另外一个类
class 狗(动物):

    def 汪汪叫(self):
        print('喵喵叫')
'''
############继承的代码实现   
class Animal:

    def eat(self):
        print("%s 吃 " %self.name)

    def drink(self):
        print ("%s 喝 " %self.name)

    def shit(self):
        print ("%s 拉 " %self.name)

    def pee(self):
        print ("%s 撒 " %self.name)


class Cat(Animal):

    def __init__(self, name):
        self.name = name
        self.breed = '猫'

    def cry(self):
        print('喵喵叫')

class Dog(Animal):

    def __init__(self, name):
        self.name = name
        self.breed='狗'

    def cry(self):
        print('汪汪叫')
        
# ######### 执行 #########
c1 = Cat('小白家的小黑猫')
c1.eat()

c2 = Cat('小黑的小白猫')
c2.drink()

d1 = Dog('胖子家的小瘦狗')
d1.eat()

分类:继承分为单继承和多继承

class ParentClass1:
	pass
class ParentClass2:
	pass
class SubClass(ParentClass1): #单继承
	pass
class SubClass(ParentClass1,ParentClass2): #多继承
	pass
#查看继承
print(SubClass1.__bases__) #(<class '__main__.ParentClass1'>,)
print(SubClass2.__bases__) #(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)
#注意:如果没有指定基类,python的默认继承object类,object是所有python类的基类,它提供了一些常用方法的实现,如__str__
class Dog:
	pass
print(Dog.__bases__) #(<class 'object'>,)

属性查找:

class Foo:
    def f1(self):
        print('Foo.f11')

    def f2(self):
        print('Foo.f2')
        self.f1()

class Bar(Foo):
    def f1(self):
        print('Foo.f12')

b=Bar()
b.f2() #Foo.f2 #Foo.f12
##-->>运行顺序是 Foo类的f2方法 -> Bar类的f1方法
#结论:出现父类和子类的属性名一样的时候,子类优先使用自己的属性

二.派生

子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要注意的是一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了

#######当子类本身并没有对应的属性,则调用父类的属性
class Dad:
	'这是Dad类'
	money = 100
	def __in
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值