标签:命名 image 传递参数 stat for style 机制 ble method
一、补充:
@classmethod
整个方法中没有用到对象命名空间中的名字,且用到了类的命名空间中的名字(普通方法和属性property除外)
类方法的默认参数:cls 调用这个发方法的类
类方法的调用方式:通过类名调用
通过类名调用的本质是方法
@statimethod
将一个普通函数放到类中来就给这个函数加一个@staticmethod装饰器
这个函数就不需要传默认的参数:self,cls
静态方法的调用方式:通过类名调用
通过类名调用本质是函数
from types import MethodType,FunctionType 配合isinstance使用,判断是方法还是函数
通过类名调用,@classmethod的是方法,@statimethod的是函数
from types import FunctionType,MethodType class Foo: @classmethod def func1(cls):pass @staticmethod def func2():pass print(‘Foo.func1-Function:‘,isinstance(Foo.func1,FunctionType)) # 判断类方法是否函数 print(‘Foo.func1-Method:‘,isinstance(Foo.func1,MethodType)) # 判断类方法是否方法 print(‘----------------------------------------‘) print(‘Foo.func2-Function:‘,isinstance(Foo.func2,FunctionType)) # 判断静态方法是否函数 print(‘Foo.func2-Method:‘,isinstance(Foo.func2,MethodType)) # 判断静态方法是否方法 ‘‘‘ Foo.func1-Function: False Foo.func1-Method: True ---------------------------------------- Foo.func2-Function: True Foo.func2-Method: False ‘‘‘
通过对象调用,@classmethod的是方法,@statimethod的是函数
from types import FunctionType,MethodType class Foo: @classmethod def func1(cls):pass @staticmethod def func2():pass f = Foo() print(‘Foo.func1-Function:‘,isinstance(f.func1,FunctionType)) # 判断对象类方法是否函数 print(‘Foo.func1-Method:‘,isinstance(f.func1,MethodType)) # 判断对象类方法是否方法 print(‘----------------------------------------‘) print(‘Foo.func2-Function:‘,isinstance(f.func2,FunctionType)) # 判断对象静态方法是否函数 print(‘Foo.func2-Method:‘,isinstance(f.func2,MethodType)) # 判断对象静态方法是否方法 ‘‘‘ Foo.func1-Function: False Foo.func1-Method: True ---------------------------------------- Foo.func2-Function: True Foo.func2-Method: False ‘‘‘
类可以被调用,对象不能被调用
def func(args): if callable(args): print(args()) else: print(‘not callable:‘,args) class Foo:pass f = Foo() func(Foo) # 类 <__main__.Foo object at 0x0000016AE645C278> func(f) # 对象 not callable: <__main__.Foo object at 0x0000016AE645C320>
总结:
需要明确传递参数的是function(函数),不需要明确传递参数的是method(函数)。类直接调用是function(函数),类的实例调用的是method(函数)
类方法:类调用和对象调用都是method(函数)
静态方法:类调用和对象调用都是function(函数)
# 判断函数、方法、对象 from types import MethodType,FunctionType def func(*args): function_count = 0 method_count = 0 foo_obj = 0 for item in args: if isinstance(item,FunctionType):function_count += 1 elif isinstance(item,MethodType):method_count += 1 elif isinstance(item,Foo):foo_obj += 1 return {‘function_count‘: function_count, ‘method_count‘: method_count, ‘foo_obj‘: foo_obj} def func1():pass class Foo: def method1(self):pass f1 = Foo() ret = func(func1,f1.method1,Foo.method1,Foo(),func,f1) print(ret) ‘‘‘ {‘function_count‘: 3, ‘method_count‘: 1, ‘foo_obj‘: 2} ‘‘‘
类、对象内存机制的解析
标签:命名 image 传递参数 stat for style 机制 ble method
原文地址:https://www.cnblogs.com/st-st/p/9567113.html