#函数对象,方法对象,绑定,未绑定 , 自省 ,python中的可调用对象类型
#无论函数还是方法都是对象
#未绑定: Class.method() 没有self
#绑定 : object.method() 自动传入self
#3.0后 未绑定的函数(方法) 就是一个普通函数
class TestClass:
def method(self,*args):
print(args)
#有三种方式调用method
#绑定的方式
t = TestClass()
t.method("1")
#未绑定
TestClass.method(t , "123") #需要传入一个对象
#object.attr 是一个对象表达式
x = t.method #把实例与方法打包起来 ,实际上就一个函数地址
x("nihao") #与t.method() 调用一样
#输出
# ('1',)
#('123',)
#('nihao',)
#未绑定方法就是一个普通函数
class TestSelf:
def normal_func(self,arg):
print("需要self:",arg)
def noself(arg): #需不需要self ,完全由你定
print("普通函数:",arg)
t = TestSelf()
TestSelf.noself(123) #通过类直接调用
TestSelf.normal_func(t,13)
#t.noself(123) 这里将直接报错, noself中不需要self
#绑定方法的一些调用方式
class Num:
def __init__(self,value):
self.value = value
def double(self):
return self.value ** 2
x = Num(2)
y = Num(3)
li = [x.double , y.double] #把绑定方法(函数指针)放在列表里
for action in li:
print(action()) #action 相当于 x.double , y.double
#绑定方法的自省
func = x.double
print(func.__self__) #通过绑定方法 查看一下,原来自身的对象是谁.<__main__.Num object at 0x0000...>
print(func.__func__) #查看一下调用的函数.<function Num.double at 0x0000000002...>
#几种调用对象的方式
#1.def someFunc()
#2.绑定的方法
#3.使用__call__
class IamCallable:
def __call__(self):
print("__call__")
i = IamCallable()
i()
python绑定方法,未绑定,可调用对象类型
最新推荐文章于 2024-03-13 20:22:21 发布