Python——方法

本文介绍了Python中的类方法调用,包括如何通过类和实例调用方法,以及类方法和静态方法的区别。通过实例展示了类调用实例方法时,如何自动绑定`self`参数,以及如何使用`classmethod`和`staticmethod`装饰器定义类方法和静态方法。
摘要由CSDN通过智能技术生成

方法是类或者对象行为特征的抽象,方法其实也是函数,它的定义方式、调用方式与函数都很相似。

一、类调用实例方法
先来看一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

定义全局空间test函数

def test():
print (‘全局空间test方法’)

定义全局空间num变量

num = 1

定义Test01类

class Test01:
# 定义Test01空间内的test02函数
def test02():
print (‘Test01空间的test02方法’)
# 定义Test01空间内的num变量
num = 2

#调用全局函数test()
test() # 打印 全局空间test方法

调用 Test01空间的函数test02()

Test01.test02() # Test01空间的test02方法

#调用全局变量num
print (num) # 打印 1

调用Test01空间的变量num

print (Test01.num) # 打印 2
上面代码中,可以看出全局空间内定义的函数和在Test01类中定义的函数没有多大区别,在调用Test01类中的函数和变量,只需要类名.变量名或者类名.函数名就可以了,这就是类调用实例。

值得注意的是,使用类名.函数名访问的是函数,使用实例.函数名访问的是方法。

例:

1
2
3
4
5
6
A = Test01()
from types import FunctionType,MethodType

通过实例访问的是方法

print (isinstance(A.test02,MethodType)) # 打印 True

通过类访问的是函数

print (isinstance(Test01.test02,FunctionType)) # 打印 True
如果使用类调用实例方法,第一个参数不会自动绑定,只能手动去为第一个参数绑定参数值。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Tree:
def apple_tree(self):
print (‘这是一棵树’,self)

直接使用类名.函数名调用,由于第一个参数不会自动绑定,会报错 TypeError: apple_tree() missing 1 required positional argument: ‘self’

Tree.apple_tree()

T = Tree()

为第一个参数绑定参数值

Tree.apple_tree(T) # 打印 这是一棵树 <main.Tree object at 0x0000000002E335F8>

第一个参数绑定的参数值不一定要绑定该Tree类的对象T,例如绑定字符串

Tree.apple_tree(‘雪梨树’) # 打印 这是一棵树 雪梨树

二、类方法和静态方法
使用@classmethod装饰的方法是类方法,python会自动绑定类方法的第一个参数到类本身(参数名通常是cls),可以通过他来传递类的属性和方法,但不能传递实例的属性和方法;使用@staticmethod装饰的方法是静态方法,静态方法不会自动绑定第一个参数到类本身,且静态方法没有‘self’和‘cls’参数,方法中不能使用类或实体的任何属性和方法。

类方法,例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class a:
a1 = 0
def c():
print (‘a类的c方法’)
@classmethod
def b(cls):
cls.c()
print (cls.a1)

通过类调用,自动绑定类方法的第一个参数,不需要手动去绑定

a.b()
‘’’
打印
a类的c方法
0
‘’’

通过实例对象调用

A = a()
A.b()
‘’’
打印
a类的c方法
0
‘’’

静态方法,例:

1
2
3
4
5
6
7
8
9
10
11
class a:
@staticmethod
def b():
print (‘b()是静态方法’)

通过类调用

a.b() # 打印 b()是静态方法

通过实例对象调用

A = a()
A.b() # 打印 b()是静态方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值