Python01_面向对象

目录

继承

什么是继承

 继承的特点

单继承

 多继承

多态

作用

特点


类(class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

为了代码的编写方便简洁,引入了类的定义;
一般,使用 class 语句来创建一个新类,class之后为类的名称(通常首字母大写)并以冒号结尾,例如:

class car(object):

    def __init__(self,name): #构造函数
        self.name=name

    def sort(self):
        print(self.name+"重量为1000KG")

    def method(self):
        print(self.name+"驾驶方式为自动驾驶")

#类中可以定义所使用的方法,类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self;
#__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
#self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数;

self代表类的实例,而非类


接下来是创建实例化对象,以及对象属性的访问;

import Car

thisCar=Car.car("小汽车") #实例化对象
thisCar.sort()           #访问对象的属性
thisCar.method()         #访问对象的属性

继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。

通过继承创建的新类称为子类派生类,被继承的类称为基类父类超类

什么是继承

继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。

注意:python中的继承分为:单继承和多继承。
继承的目的就是提高代码的重用率减少了很多不必要的代码量,有下图就可以看出动物有,猫和狗的基本特性,动物就是父类,猫和狗就是子类。

 继承的特点

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

2、在继承中父类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。

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

单继承

class bus(object):            #创建bus类

    def __init__(self, name): #构造函数
        self.name = name

    def sort(self):           #实现客车的重量属性
        print(self.name+"重量为7T") #打印输出重量属性

    def method(self):         #实现客车的驾驶方法
        print(self.name+"驾驶方式为手动驾驶") #打印输出驾驶方法

class bus1(bus):
    def __init__(self, name):
        self.name = name
import Bus
thisBus1=Bus.bus1("东风路28路公交车")   #实例化对象
thisBus1.sort()                 #访问对象属性
thisBus1.method()               #访问对象属性

输出结果:

 多继承

class father(object):         #创建father类
    def __init__(self,money): #构造函数
        self.money=money
    def play(self):          #实现父亲play方法
        print("play")
    def func(self):          #实现父亲func方法
        print("func1")
class mother(object):                #创建mother类
    def __init__(self,faceValue):    #构造函数
        self.faceValue=faceValue
    def eat(self):          #实现母亲eat方法
        print("eat")
    def func(self):         #实现母亲func方法
        print("func2")
#导入父类
from father import father
from mother import mother
class child(father,mother): #定义子类
    def __init__(self,money,faceValue):  #调用子类构造方法
        self.money=money
        self.faceValue = faceValue
from child import child #导入child包

def main():
    c=child(300,100)  # 实例化子类
    print(c.money,c.faceValue) #打印子类属性
    c.play()          #调用父类father方法
    c.eat()           #调用父类mother方法

if __name__=="__main__":
    main()

输出结果:

300 100
play
eat

多态

作用

让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。


特点

只关心对象的实例方法是否同名,不关心对象所属的类型;对象所属的类之间,继承关系可有可无;多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强;多态是调用方法的技巧,不会影响到类的内部设计。
例子1:

#定义Animal类

class Animal(object):
    def __init__(self,name):
        self.name = name
    def eat(self):                    #实现动物吃的属性
        print(self.name+"吃")

#定义Cat类继承Animal类
class Cat(Animal):#定义子类
    def __init__(self,name):
        #self.name = name
        super(Cat,self).__init__(name)
    def eat(self):
        print(self.name+"吃")


#定义Mouse类继承Animal类
class Mouse(Animal):#定义子类
    def __init__(self,name):
        #self.name = name
        super(Mouse,self).__init__(name)
    def eat(self):
         print(self.name+"吃")

#定义Person类,实现人可喂任意一种继承Animal类的动物类

class Person(object):
    def feedAnimal(self,ani):
        print("给你食物")
        ani.eat()


#多态

tom = Cat("tom")
jerry = Mouse("jerry")
per = Person()
per.feedAnimal(tom)
per.feedAnimal(jerry)
 

输出结果

 例子2:

class bus2(object):            #创建bus类

    def __init__(self, name): #构造函数
        self.name = name

    def method(self):         #实现客车的驾驶方法
        print(self.name+"驾驶方式为手动驾驶") #打印输出驾驶方法

#定义子类公交车bus3,父类为bus2
class bus3(bus2):
    def __init__(self, name): #构造函数
        self.name=name

#创建person对象
class person(object):
    def permethod(self,bus_name):
        bus_name.method()

bus28 = bus3("28路公交车")     #实例化对象
bus906 = bus3("906路公交车")    #实例化对象
bus32 = bus3("B32路公交车")    #实例化对象
per = person()
per.permethod(bus28)  #调用子类中重写的父类方法
per.permethod(bus906) #调用子类中重写的父类方法
per.permethod(bus32)  #调用子类中重写的父类方法

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值