本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Basic/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接:https://pan.baidu.com/s/1x2Ynh_VibPY2u-HWTaJo8w?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Basic
——————————————————
就像之前介绍的,类是包含数据(变量,称为属性)和代码(函数,称为方法)的自定义数据结构。
方法就是类中的函数。
在类中包含有三种类型的方法,有些方法属于类本身,有些方法属于该类的对象,有些则两者都不属于。
-
实例方法(instance method):该方法没有前置装饰器,其第一个参数必须是self,引用对象本身;
-
类方法(class method):该方法有前置装饰器@classmethod,其第一个参数应该是cls(或者别的什么,只要不是保留字class就行),引用类本身;
-
静态方法(static method):该方法有前置装饰器@staticmethod,其第一个参数不能是对象或类。
1.实例方法:
在创建类时,通常编写的就是实例方法。实例方法的第一个参数为self,通过它来传递实例的属性和方法(也可以传类的属性和方法)。当调用方法时,Python会将对象传入该方法。
下面定义一个实例方法,获取学生信息。
1# 定义一个类
2>>> class Student:
3... def __init__(self , name , age):
4... self.name = name
5... self.age = age
6...
7... def student_info(self):
8... return f"新增学生姓名:{self.name},年龄:{self.age}。"
9
10# 实例化一个对象
11>>> a_student = Student('Tom' , '12')
12
13# 调用实例方法
14>>> a_student.student_info()
15'新增学生姓名:Tom,年龄:12。'
2.类方法:
类方法影响的是整个类。对类做出任何改动都会影响该类所有的对象。
在类定义中,前置装饰器@classmethod指明接下来的函数是类方法。另外,方法的第一个参数是类本身,通过它来传递类的属性和方法。
Python的传统做法是将该参数命名为cls,因为class是保留关键字,无法用于此处。
原则上,类方法是将类本身作为对象进行操作的方法。如果我们需要有个方法,并且该方法在逻辑上采用类本身作为对象来调用更为合理,那么就需要将该方法定义为类方法。另外,如果需要继承,也可以定义为类方法。
实例对象和类对象都可以调用类方法。
下面定义一个类方法,用于调整学生的水平信息students_level
。
1# 定义一个类
2>>> class Student:
3... students_level = 0
4...
5... def __init__(self , name , age):
6... self.name = name
7... self.age = age
8...
9... def student_info(self):
10... return f"新增学生姓名:{self.name},年龄:{self.age}。"
11...
12... @classmethod
13... def set_level(cls , level):
14... cls.students_level = level
15... return level
16
17# 实例化对象
18>>> student_1 = Student('Tom' , '12')
19>>> student_2 = Student('Lucy' , '11')
20
21# 调用实例方法
22>>> student_1.student_info() , student_2.student_info()
23('新增学生姓名:Tom,年龄:12。', '新增学生姓名:Lucy,年龄:11。')
24# 调用类属性
25>>> student_1.students_level , student_2.students_level
26(0, 0)
27# 调用类方法
28>>> Student.set_level(2)
292
30# 调用类属性
31>>> student_1.students_level , student_2.students_level
32(2, 2)
33# 调用类方法
34>>> student_1.set_level(3)
353
36# 调用类属性
37>>> student_1.students_level , student_2.students_level
38(3, 3)
3.静态方法:
静态方法既不影响类,也不影响类的对象,是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,它出现在类中只是为了方便而已。
静态方法使用@staticmethod作为前置装饰器,参数随意,没有self和cls参数,但是方法体中不能使用类或实例的任何属性和方法。
如果我们需要有个方法,并且该方法在逻辑上是独立的,那么我们就要考虑用静态方法。其实,我们也可以在类外面写一个同样的函数来做这些事,但是这样做就打乱了逻辑关系,也会导致以后代码维护困难。
实例对象和类对象都可以调用静态方法。
1# 定义一个类
2>>> class Student:
3... students_level = 0
4...
5... def __init__(self , name , age):
6... self.name = name
7... self.age = age
8...
9... def student_info(self):
10... return f"新增学生姓名:{self.name},年龄:{self.age}。"
11...
12... @classmethod
13... def set_level(cls , level):
14... cls.students_level = level
15... return level
16...
17... @staticmethod
18... def school_info(name="光明小学"):
19... return f"学校名称:{name}。"
20
21# 实例化对象
22>>> student_1 = Student('Tom' , '12')
23>>> student_2 = Student('Lucy' , '11')
24
25# 调用实例方法
26>>> student_1.student_info() , student_2.student_info()
27('新增学生姓名:Tom,年龄:12。', '新增学生姓名:Lucy,年龄:11。')
28# 调用方法
29>>> student_1.school_info()
30'学校名称:光明小学。'
31# 调用方法
32>>> student_2.school_info("东方小学")
33'学校名称:东方小学。'
本篇文章来源于微信公众号: 码农设计师