其他分享
首页 > 其他分享> > 面向对象(方法、继承、重写)

面向对象(方法、继承、重写)

作者:互联网

前言

本文主要介绍方法(实例方法、类方法、静态方法)、继承(单继承和多继承)以及重写等内容。

一、方法

1、实例方法

用户自定义的方法。

class Student:
    #类属性
    stu_number=True
    stu_name="张三"
    stu_age=True
    def __init__(self):
        #实例属性
        self.stu_sex=True
        self.stu_name=True

    def study(self):
        print("好好学习,天天向上")

    def eat(self):
        print("学习饿了,要吃饭")

my_student = Student()
#方法调用
#1、对象名.方法名
my_student.study()

#2、类名.方法名
#因为有个参数self,而self代表对象,因此传入一个对象my_student
Student.study(my_student)

2、类方法

类方法需要使用@classmethod去声明,它是一个装饰器,同时在方法中的参数为cls

@classmethod
def sleep(cls):
    print("每个人都需要睡觉")
class Student:
    #类属性
    stu_number=True
    stu_name="张三"
    stu_age=True
    def __init__(self):
        #实例属性
        self.stu_sex=True
        self.stu_name=True

    def study(self):
        print("好好学习,天天向上")

    def eat(self):
        print("学习饿了,要吃饭")
  
    @classmethod
    def sleep(cls):
        print("每个人都需要睡觉")

my_student = Student()
#方法调用
#1、对象名.方法名
my_student.study()
#2、类名.方法名
#因为有个参数self,而self代表对象,因此传入一个对象my_student
Student.study(my_student)

#通过对象名.方法名
my_student.sleep()
#通过类名.方法名
Student.sleep()

通过上面的调用,对比实例方法和类方法,在调用的时候有一点点的区别,在使用类名.方法名调用的时候,类方法可以不用传递参数,而实例方法需要传递参数。

3、静态方法

与类方法一样,静态方法在定义时也需要声明:@staticmethod,与类方法和实例方法不同的是,静态方法没有self或者cls

class Student:
    #类属性
    stu_number=True
    stu_name="张三"
    stu_age=True
    def __init__(self):
        #实例属性
        self.stu_sex=True
        self.stu_name=True

    def study(self):
        print("好好学习,天天向上")

    def eat(self):
        print("学习饿了,要吃饭")
    #类方法
    @classmethod
    def sleep(cls):
        print("每个人都需要睡觉")
    #静态方法   
    @staticmethod
    def stop():
        print("123")

my_student = Student()
#方法调用
#1、对象名.方法名
my_student.study()
#2、类名.方法名
#因为有个参数self,而self代表对象,因此传入一个对象my_student
Student.study(my_student)

#通过对象名.方法名
my_student.sleep()
#通过类名.方法名
Student.sleep()

#通过对象名.方法名
my_student.stop()
#通过类名.方法名
Student.stop()

二、继承

一个类可以通过继承另一个类的非私有的成员属性和方法。例如B继承A,那么A就叫父类或者基类,B就叫子类。在python中,一个子类可以继承多个父类。

class MianBaoCar:
    def __init__(self):
        self.color = "white"
        self.wheel = 4

    def drive(self):
        print("我是普通面包车,我可以开100km/h")
class FlsyCar(MianBaoCar):
    def __init__(self):
        print("我是跑车:2222")
    def my_color(self):
        print("我是蓝色")

 

 从上面的红框中,可以看出继承了MianBaoCar中的属性wheel和color以及方法drive

多继承

class Car:
    def __init__(self):
        self.color = "white"
        self.wheel = 4
        print("我是普通车型:1111")
    def drive(self):
        print("我是普通车,我可以开120km/h")
class MianBaoCar:
    def __init__(self):
        self.color = "black"
        self.wheel = 5
        self.fangxiangpan=1
        print("我是面包车,2222")
    def drive(self):
        print("我是普通面包车,我可以开100km/h")
class FlsyCar(Car,MianBaoCar):
    # def __init__(self):
    #     # super().__init__()
    #     print("我是跑车:3333")
    def my_color(self):
        print("我是蓝色")
    def drive(self):
        super().drive()
        print("我是跑车,我要开180km/h")
        
# 对象初始化
my_flsycar =FlsyCar()
# my_flsycar.drive()
# my_flsycar.drive()
print(my_flsycar.fangxiangpan)

 

FlsyCar继承了(Car和MianBaoCar),但输出my_flsycar.fangxiangpan这里报错了,原因是多继承时,继承的构造函数是第一个父类Car而不是MianBaoCar。而第一个父类Car中并没有fangxiangpan这个属性。


三、重写

在子类中重新实现父类的方法就叫做重写。

class MianBaoCar:
    def __init__(self):
        self.color = "white"
        self.wheel = 4

    def drive(self):
        print("我是普通面包车,我可以开100km/h")
class FlsyCar(MianBaoCar):
    def __init__(self):
        # super().__init__()
        print("我是跑车:2222")
    def my_color(self):
        print("我是蓝色")
    def drive(self):
        print("我是跑车,我要开180km/h")


# 对象初始化
my_flsycar =FlsyCar()
# my_flsycar.drive()
my_flsycar.drive()

子类中继承父类的drive()方法,打印的结果是:我是普通面包车,我可以开100km/h。子类中重写了父类的drive()方法后,打印的结果是:我是跑车,我要开180km/h。

那么,如果子类需要保留父类中drive()方法,使得打印结果是:我是普通面包车,我可以开100km/h。我是跑车,我要开180km/h。应该怎么做呢?

super():代表父类

class MianBaoCar:
    def __init__(self):
        self.color = "white"
        self.wheel = 4
    def drive(self):      
        print("我是普通面包车,我可以开100km/h")

class FlsyCar(MianBaoCar):
    def __init__(self):
        # super().__init__()
        print("我是跑车:2222")
    def my_color(self):
        print("我是蓝色")
    def drive(self):
        super().drive()
        print("我是跑车,我要开180km/h")
# 
my_flsycar =FlsyCar()
my_flsycar.drive()

 

标签:__,继承,my,self,drive,面向对象,print,重写,def
来源: https://www.cnblogs.com/xiaofenggou/p/16649414.html