ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-09-02 12:31:12  阅读:221  来源: 互联网

标签:__ 继承 my self drive 面向对象 print 重写 def


前言

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

一、方法

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有