Python——方法

Posted mingmingming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python——方法相关的知识,希望对你有一定的参考价值。

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

一、类调用实例方法

先来看一段代码:

# 定义全局空间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类中的函数和变量,只需要类名.变量名或者类名.函数名就可以了,这就是类调用实例。

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

例:

A = Test01()
from types import FunctionType,MethodType
# 通过实例访问的是方法
print (isinstance(A.test02,MethodType))    # 打印 True
# 通过类访问的是函数
print (isinstance(Test01.test02,FunctionType))    # 打印 True

如果使用类调用实例方法,第一个参数不会自动绑定,只能手动去为第一个参数绑定参数值。

例:

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’参数,方法中不能使用类或实体的任何属性和方法。

类方法,例:

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
‘‘‘    

 

静态方法,例:

class a:
	@staticmethod
	def b():
		print (‘b()是静态方法‘)

# 通过类调用
a.b()    # 打印 b()是静态方法

# 通过实例对象调用
A = a()
A.b()    # 打印 b()是静态方法

 

以上是关于Python——方法的主要内容,如果未能解决你的问题,请参考以下文章

python 类方法和静态方法的区别

python字符串常用方法

有哪些python引包的方法?

python中魔法方法加减怎么用

python-Python的类怎么调用其他类的方法

python获取上层方法调用