标签:ssi import class ssm pytho 字符串 error int object
方法是类或者对象行为特征的抽象,方法其实也是函数,它的定义方式、调用方式与函数都很相似。
先来看一段代码:
# 定义全局空间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()是静态方法
标签:ssi import class ssm pytho 字符串 error int object
原文地址:https://www.cnblogs.com/mingmingming/p/11116818.html