第一篇 第二十三节 类方法、静态方法、继承、重写

上一节介绍了类、对象、类属性、实例属性的概念以及类属性,实例属性,实例方法的调用
这一节,我们学习类方法、静态方法、类继承、重写以及实际中的应用
上节课,我们定义了一个People类:

# -*-coding:utf8-*-
"""
=========================================
author: Lujier            time: 2019/5/26
E-mail: [email protected]
==========================================
"""


class People:
    """
    定义一个人类People,
    有属性:吃饭,睡觉,年龄,身高,体重,性别, 名字
    行为:跑步
    """
    behavior_1 = "吃饭"  # 类属性定义
    behavior_2 = '睡觉'

    def __init__(self, name, sex, age):
        """
        :param name: user's name---->str
        :param sex:  user's sex---->str
        :param age:  user's age---->int
        """
        self.name = name  # 实例属性定义
        self.sex = sex
        self.age = age

    def run(self, minites, distance):  # 定义一个跑步的方法,实例方法
        """
        :param minites:   ran for how long time----->int
        :param distance:  ran many kilometers----->int
        """
        print(f"{self.name}在{minites}分钟跑了{distance}公里")


我们继续在原来的基础上进行学习
类方法、静态方法、继承、方法重写的定义:
1 类方法:
概念:使用装饰器 @classmethod,第一个参数必须是类,该参数名约定为cls,通过它来传递类的属性的方法
调用:类和实例对象都可以调用
应用场景:需要站在类的角度进行的行为,那么就应该定义为类方法

 @classmethod   # 类方法装饰器
    def skill_introduce(cls):    # 类方法,cls代表的是类本身
        print(f"会{cls.behavior_1},并且还会{cls.behavior_2}")

调用:
在这里插入图片描述
2 静态方法:
概念:使用装饰器 @staticmethod,第一个参数随意,可以是cls,self,但是方法体中不能使用类或实例的任何
方法和属性
调用:类和实例对象都可以调用
应用场景:存放逻辑代码,内部不需要引用类属性和实例属性

     @staticmethod  # 静态方法装饰器
    def static_introduce1():
        print(f"静态方法1:吃饭睡觉,是亘古不变的技能,哈啊")

     @staticmethod   # 静态方法装饰器
    def static_introduce2(name): 
        print(f"静态方法3:我的名字是:{name}") 

在这里插入图片描述
3 继承:子类通过继承父类获取父类的所有属性的方法,被继承的是父类(基类),继承者是子类
Girl类继承People:

class Girl(People):
    def __init__(self, name, age, sex="Girl"):
        super().__init__(name, sex, age)

    def beauty_nick_name(self):  # 定义一个方法,女性的一些其他褒义称呼
        print("小美妞,大美女,御姐")

在这里插入图片描述
通过截图,我们可以知道,如果继承父类,那么也会自然而然的继承父类的类属性,实例属性,类方法,实例方法,静态方法等等内容

4. 重写
依旧是3中的例子,定义一个Girl类,并继承People类,在这里,我们需要
1) 增加一个属性:体重weight
2) People中run()方法重写

class Girl(People):
    def __init__(self, name, age, weight, sex="Girl"):
        """
        __init__方法重写,增加weight属性
        :param name: name ----- >str
        :param age:  age-------> int
        :param weight:  weight ---->int
        :param sex:    sex---->str
        """
        super().__init__(name, sex, age)  # 继承People的__init__函数
        self.weight = weight

    def beauty_nick_name(self):  # 定义一个方法,女性的一些其他褒义称呼
        print("小美妞,大美女,御姐")

    def run(self, minutes, distance): # 重写run方法
        super().run(minites, distance)
        print(f"{self.name}体重是:{self.weight}")

其实,增加了一个属性weight,相当于__init__函数也重写了
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章