49. 如何判断是函数还是方法?

本文通过实例演示了Python中方法与函数的区别。方法是与对象关联的函数,通过对象调用;而函数则是独立的代码块,可以直接调用。通过isinstance函数检查,可以判断一个调用是否为方法或函数。

方法通过对象来调用

函数可以直接调用

from types import MethodType, FunctionType
 
class Bar:
    def foo(self):
        pass
 
def foo2():
    pass
 
def run():
    print("foo 是函数", isinstance(Bar().foo, FunctionType))
    print("foo 是方法", isinstance(Bar().foo, MethodType))
    print("foo2 是函数", isinstance(foo2, FunctionType))
    print("foo2 是方法", isinstance(foo2, MethodType))
 
if __name__ == '__main__':
    run()

foo 是函数 False
foo 是方法 True
foo2 是函数 True
foo2 是方法 False

 

前端报错如下,请分析:vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in render: "TypeError: _vm.isMainFlowAdded is not a function" found in ---> <TableCell> <BodyRow> <TableRow> <ConnectTableRow> <ProxyConnectTableRow> <ExpandableRow> <ConnectExpandableRow> <ProxyConnectExpandableRow> <BaseTable> <ConnectBaseTable> <ProxyConnectBaseTable> <BodyTable> <ExpandableTable> <ConnectExpandableTable> <ProxyConnectExpandableTable> <StoreProvider> <Table> <Table> <LocaleReceiver> <ASpin> <Table> <ATable> <Anonymous> <Anonymous> <Portal> <PortalWrapper> <Anonymous> <AModal> <AFormModel> <Process> <PageToggleTransition> at src/components/transition/PageToggleTransition.vue <Anonymous> <ALayoutContent> <Anonymous> <ALayout> <Anonymous> <ALayout> <AdminLayout> at src/layouts/AdminLayout.vue <TabsView> at src/layouts/tabs/TabsView.vue <ALocaleProvider> <LocaleReceiver> <AConfigProvider> <App> at src/App.vue <Root> warn @ vue.runtime.esm.js?2b0e:619 logError @ vue.runtime.esm.js?2b0e:1884 globalHandleError @ vue.runtime.esm.js?2b0e:1879 handleError @ vue.runtime.esm.js?2b0e:1839 Vue._render @ vue.runtime.esm.js?2b0e:3550 updateComponent @ vue.runtime.esm.js?2b0e:4066 get @ vue.runtime.esm.js?2b0e:4479 run @ vue.runtime.esm.js?2b0e:4554 flushSchedulerQueue @ vue.runtime.esm.js?2b0e:4310 eval @ vue.runtime.esm.js?2b0e:1980 flushCallbacks @ vue.runtime.esm.js?2b0e:1906 Promise.then (async) timerFunc @ vue.runtime.esm.js?2b0e:1933 nextTick @ vue.runtime.esm.js?2b0e:1990 queueWatcher @ vue.runtime.esm.js?2b0e:4402 update @ vue.runtime.esm.js?2b0e:4544 notify @ vue.runtime.esm.js?2b0e:730 reactiveSetter @ vue.runtime.esm.js?2b0e:1055 proxySetter @ vue.runtime.esm.js?2b0e:4631 handleAddMainFlowQtimeCancel @ Normal.vue?d49f:1942 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854 invoker @ vue.runtime.esm.js?2b0e:2179 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854 Vue.$emit @ vue.runtime.esm.js?2b0e:3888 handleCancel @ Modal.js?1759:132 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854 invoker @ vue.runtime.esm.js?2b0e:2179 __emit @ BaseMixin.js?b488:37 close @ Dialog.js?e343:446 invokeWithErrorHandling @ vue.runtime.esm.js?2b0e:1854 invoker @ vue.runtime.esm.js?2b0e:2179 original._wrapper @ vue.runtime.esm.js?2b0e:6917 vue.runtime.esm.js?2b0e:1888 TypeError: _vm.isMainFlowAdded is not a function at fn (Normal.vue?29d3:3788) at normalized (vue.runtime.esm.js?2b0e:2590) at Proxy.render (TableCell.js?22d5:80) at VueComponent.Vue._render (vue.runtime.esm.js?2b0e:3548) at VueComponent.updateComponent (vue.runtime.esm.js?2b0e:4066) at Watcher.get (vue.runtime.esm.js?2b0e:4479) at Watcher.run (vue.runtime.esm.js?2b0e:4554) at flushSchedulerQueue (vue.runtime.esm.js?2b0e:4310) at Array.eval (vue.runtime.esm.js?2b0e:1980) at flushCallbacks (vue.runtime.esm.js?2b0e:1906)
最新发布
12-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值