上一节介绍了类、对象、类属性、实例属性的概念以及类属性,实例属性,实例方法的调用 这一节,我们学习类方法、静态方法、类继承、重写以及实际中的应用 上节课,我们定义了一个People类:
# -*-coding:utf8-*- """ ========================================= author: Lujier time: 2019/5/26 E-mail: 2327994109@qq.com ========================================== """ 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__函数也重写了