Python学习——类
目录
Python学习——类
前言
类的基础语法
定义
构造方法
继承
掠夺
前言
众所周知,现实世界的事物由两部分组成,即属性和行为,类也可以包含属性和行为,所以描述现实世界事物是非常合适的。
例如:
接下来让我们看看类到底是个啥
类的基础语法
定义
类由两部分组成:
首先类的名称需要首字母大写,其次类中的函数叫称为方法。
class 类名称
成员变量
def 成员方法(self,参数):
成员方法体
self的注意点
- self表示类对象本身
- 只有通过self,成员方法才能访问类的成员变量
- self不占用形参位置,调用时无需理会
构造方法
__init__的使用
函数内部的变量与外部是在两个空间,为了使自定义方法能在类里互通, 需要一个 self 作为载体,将需要互通的变量作为 self 的属性进行传递; 因此,构造方法__init__旨在使用载体self 来承载传入参数。 __init__特殊方法后的括号里要写上 self 以及传入参数, 而自定义方法后的括号就只需要写 self 即可。
输入10位练习生的基本属性
代码示例如下:
class Student:
# 构建属性
def __init__(self, name, clothing, hair_style): # 构造方法
self.name = name
self.clothing = clothing
self.hair_style = hair_style
def info(self):
print(f"练习生姓名:{self.name},练习生衣着:{self.clothing},练习生发型:{self.hair_style}")
for i in range(10):
print(f"当前录入第{i+1}位练习生信息,总共录入10位练习生信息")
stu_1 = Student(input(f"请输入练习生姓名:"), input(f"请输入练习生衣着:"), input(f"请输入练习生头型:"))
print(f"练习生{i+1}信息录入完成,信息为:【练习生姓名:{stu_1.name},练习生衣着:{stu_1.clothing},练习生发型:{stu_1.hair_style}】")
continue
运行结果如下
![](https://img-blog.csdnimg.cn/704be4f0bfc5485ba6184466259d54ae.png)
继承
继承:在某个类(父类)的基础上添加几个方法,形成另一个类(子类)。
- 父类从无到有去写属性和方法,第一行是 class 类名:
- 子类可继承父类的属性和方法,第一行是 class 类名(父类名) :
子类在特殊方法里使用super()函数,就可以继承到父类的全部属性与方法。super().__init__(形参) 。
注意:在子类中写入与父类同名的方法可以实现覆盖。
代码示例如下:
"""
演示继承
"""
class Student:
# 构造方法
def __init__(self, name, clothing, hair_style): # 构造方法
self.name = name
self.clothing = clothing
self.hair_style = hair_style
def intr(self): # 自我介绍
print(f"大家好,我是{self.name},大家多多关照")
def time(self): # 练习时长
print(f"练习时长两年半。")
class Student_1(Student): # 括号内填入父类名
def __init__(self, name, clothing, hair_style):
# 继承父类的信息
super().__init__(name, clothing, hair_style)
def intr(self): # 修改父类内部的介绍
print(f"大家好,我是{self.name}")
def skill(self):
print(f"我会唱跳rap,还会打篮球。")
# 调用
stu = Student_1("ikun", "背带裤", "中分")
stu.intr() # 调用修改后的父类信息,内容已经被子类修改
stu.time() # 调用父类
stu.skill() # 调用子类
运行结果如下:
![](https://img-blog.csdnimg.cn/8b9392188e6f416db5356477dc85644c.png)
掠夺
一个类可以掠夺很多其它的类,它可以将被掠夺的类当作掠夺类self 的属性使用,即在掠夺类的__init__中,将被掠夺的类赋给self。被掠夺的类的数量就不设上限。
假如掠夺者和被掠夺者里都有 intr 函数,掠夺者里的方法用 stu.intr(),被掠夺者里的方法用 stu.info.intr(),于是不会覆盖原被掠夺者内的同名方法。
代码示例如下:
class Student: # 一个无辜的,被掠夺的类
# 构造方法
def __init__(self, name, clothing, hair_style): # 构造方法
self.name = name
self.clothing = clothing
self.hair_style = hair_style
def intr(self): # 自我介绍
print(f"大家好,我是{self.name},衣着{self.clothing},发型是{self.hair_style},大家多多关照")
def time(self): # 练习时长
print(f"练习时长两年半。")
class Student_1: # 粗暴的掠夺者
def __init__(self, name, clothing, hair_style):
# 继承父类的信息
self.name = name
self.clothing = clothing
self.hair_style = hair_style
self.info = Student(name, clothing, hair_style) # 掠夺Student内部的方法
def intr(self): # 同名也不影响被掠夺的内容
print(f"大家好,我是{self.name}")
def skill(self):
print(f"我会唱跳rap,还会打篮球。")
# 调用
stu = Student_1("ikun", "背带裤", "中分")
stu.intr() # 调用掠夺者的简介
stu.info.intr() # 调用被掠夺者的简介
stu.info.time() # 调用父类
stu.skill() # 调用子类
运行结果如下:
![](https://img-blog.csdnimg.cn/ace3db5973e24f379c38c4d9bac3b7ce.png)