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

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

时间:2022-09-02 12:34:19浏览次数:56  
标签:__ 继承 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
From: https://www.cnblogs.com/xiaofenggou/p/16649414.html

相关文章

  • 19 | JAVA反射之获取继承关系
    反射获取继承关系获取父类的Class有了Class实例,我们还可以获取它的父类的Class://reflectionpublicclassMain{publicstaticvoidmain(String[]args)thro......
  • UML面向对象第一天
    软件工程以系统性、规范化的、可定量的过程化方法开发和维护软件,以及研究如何把经过时间考验而证明正确的管理技术和当前能够得到的技术方法结合起来。1968年,讨论软件的可......
  • C#-继承
    实现classTeat1{//父类}classTest2:Test{//子类}base关键字base.property;//调用父类属性base.method();//调用父类方法classComputer......
  • Python_15面向对象
    一、面向对象概念和基本语法类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函......
  • 面向对象分析设计之一--三个模型
    1.对象模型描述系统的静态结构,包括类和对象,它们的属性和操作,以及它们之间的关系。涉及UML图:类图、对象图2.动态模型着重于系统的控制逻辑,考察在任何时候对......
  • Day26继承
    继承继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。extends的意思是“扩展”。子类是父类的扩展。Java中类只有单继承,没有多继承!继承是类和类之间的一种......
  • Python面向对象模板
    内容概要面向对象面向对象前戏对象与类的创建对象独有的数据对象独有的功能动静态方法面向对象三大特性之继承面向对象三大特性之封装property伪装属性面向对象三大......
  • JAVA进阶--static、工具类、单例、继承--2022年8月28日
    第一节 static静态关键字1、成员变量的分类和访问分别是什么样的?静态成员变量(有static修饰,属于类,加载一次,可以被共享访问)访问格式:类名.变量......
  • python之面向对象
    面向对象本质:将特定的数据与特定的功能绑定到一起将来只能彼此相互使用对象其实就是一个容器里面将数据和功能绑定到一起使用场景一:​ eg:游戏人物......​ ......
  • 重载和重写的区别
    重载发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。重写重写表示子类重写父类的方法发......