面向对象编程:三大特性之继承

本文介绍Python中的类与继承概念,包括如何定义类、实例化对象、实现单继承和多继承等。并解释了继承机制、类属性与实例属性的区别、方法重写等内容。

类之间的继承关系:

八股文:

面向对象的编程带来的主要好处之一是代码的重用,实现各种重用的方法之一是通过继承机制。继承完全可以理解成类之间的父类和子类型关系。

继承概念:继承是类与类的一种关系,是一种子类与父类的关系,即爸爸与儿子,爸爸生个儿子,儿子继承爸爸的属性和方法。

如猫类,猫是动物;猫类继承于动物类,动物类为父类也是所有动物的基类;猫类是动物类的子类,也是动物类的派生类。

Python有单继承与多继承。单继承即子类继承于一个类,多继承即子类继承于多个类,多继承会比较少遇到,本章节主要讲单继承。

什么时候使用继承:假如我需要定义几个类,而类与类之间有一些公共的属性和方法,这时我就可以把相同的属性和方法作为基类的成员,而特殊的方法及属性则在本类中定义。这样子类只需要继承基类(父类),子类就可以访问到基类(父类)的属性和方法了,它提高了代码的可扩展性和重用行。

如:猫,狗 都属于动物,它们行为相似性高,都会叫,会吃,会喝,会拉,会撒娇。

Python类继承 注意事项:

  • 在继承中基类的构造方法(__init__()方法)不会被自动调用,它需要在其派生类的构造方法中亲自专门调用。
  • 在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。而在类中调用普通函数时并不需要带上self参数
  • Python 总是首先查找对应类的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)

class Animal:
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    def eat(self):
        print('%s正在吃饭!!'%self.name)

#类名后面加括号表示继承!
'''
当子类继承父类的时候,子类Person便可以使用父类Animal中所有的方法和属性!!!
不需要在重新去定义!!
'''
class Person(Animal):
    def talk(self):
        print('%s正在讲话!!'%self.name)

class Dog(Animal):
    def chase(self):
        print('%s正在追赶奔跑'%self.name)

p1=Person()

会进行报错!!

原因:当子类继承父类的时候,子类进行实例化一个具体对象,必须也要满足父类所需要的实例属性

 问题:如何对父类方法和类属性进行重写?

 简单的重写(重构父类中的方法):
        直接在子类当中定义一个和父类相同的方法时,就会重写父类当中的方法
    重写(重构父类中的类属性):
        同样的,直接在子类当中定义一个和父类相同的类属性时,就会重写父类当中的方法

class Animal:
    bu_animal='食肉动物'
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    def eat(self):
        print('%s正在吃饭!!'%self.name)

#类名后面加括号表示继承!
'''
当子类继承父类的时候,子类Person便可以使用父类Animal中所有的方法和属性!!!
不需要在重新去定义!!
'''
class Person(Animal):
    bu_animal = '杂食动物'
    def talk(self):
        print('%s正在讲话!!'%self.name)
    '''
    简单的重写(重构父类中的方法):
        直接在子类当中定义一个和父类相同的方法时,就会重写父类当中的方法
    重写(重构父类中的类属性):
        同样的,直接在子类当中定义一个和父类相同的类属性时,就会重写父类当中的方法
    '''
    def eat(self):
        print('%s在优雅的进行吃饭'%self.name)

class Dog(Animal):
    def chase(self):
        print('%s正在追赶奔跑'%self.name)

'''
1、当子类继承父类的时候,子类进行实例化一个具体对象,必须也要满足父类所需要的实例属性
2、当调用方法的时候,也可以随意调用父类中的方法
'''
p1=Person('小李',20,'男')
d1=Dog('小贝',2,'公狗')
p1.eat()
d1.eat()
p1.talk()
d1.chase()
print(p1.bu_animal)

1 、什么是类?

def Dog(name,d_type):{



}

该部分其实就是一个类,类中定义了这些对象的都具备的属性、共同的方法

2、什么是对象?

说简单一点,对象就是实实在在的东西!!---实体

d3=Dog('tiger','泰迪')
d4=Dog('贝贝','柯基')

d3,d4相当于现实世界当中实实在在存在的实体,即就叫做对象!!

3、什么叫做实例化?

说简单一点就是模板调用的过程(类的调用过程)就叫做实例化!!--实例化之后产生的东西就叫做对象

4、什么是封装?

def Dog(name,d_type):
    dog1 = {
        'name': name,
        'd_type': d_type,
        #'attack': 18,
        'year': 10
    }
    if d_type in attack:
        Dog["attack"]=attack[d_type]
    else:
        dog1["attack"]=15
    return dog1

假设在这里我创建了一个狗类的方法和一个人类的方法,所谓封装可以简单的理解为:狗类的方法人理论上是不运行人去调用的!

多态和继承我会在后续代码中进行详细讲解!!

类的基本语法:

        1、为了编程的规范:python中类首字母应该大写

            直接就可以在类中定义属性
            像下面这种在类中直接定义的属性,叫做类属性、类变量(是所有对象都可以公共共享的一个属性)

            类中的方法:第一个参数必须是self(也可以是其他名字)---这里的self代表实例本身

class Dog:
    #直接就可以在类中定义属性
    # 像下面这种在类中直接定义的属性,叫做类属性、类变量
    d_type='泰迪'
    def hello(self):    #方法:第一个参数必须是self(也可以是其他名字)---这里的self代表实例本身
        print('Hello!,I am a',self.d_type)

             当类写完之后,我们需要对类进行实例化,将其变成一个真正的实体,对象---python中一切皆对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天的学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值