python绑定方法,未绑定,可调用对象类型

#函数对象,方法对象,绑定,未绑定 , 自省 ,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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值