栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python

也许有点示例代码将有助于:发现其中的差别在调用签名

foo
class_foo
并且
static_foo

class A(object):    def foo(self, x):        print "executing foo(%s, %s)" % (self, x)    @classmethod    def class_foo(cls, x):        print "executing class_foo(%s, %s)" % (cls, x)    @staticmethod    def static_foo(x):        print "executing static_foo(%s)" % x    a = A()

以下是对象实例调用方法的常用方法。对象实例,a作为第一个参数隐式传递。

a.foo(1)# executing foo(<__main__.A object at 0xb7dbef0c>,1)

使用

classmethods
时,对象实例的类作为第一个参数而不是隐式传递
self

a.class_foo(1)# executing class_foo(<class '__main__.A'>,1)

你也可以

class_foo
使用该类进行呼叫。实际上,如果你将某些东西定义为类方法,则可能是因为你打算从类而不是从类实例调用它。
A.foo(1)
本来会引发
TypeError
,但
A.class_foo(1)
效果很好:

A.class_foo(1)# executing class_foo(<class '__main__.A'>,1)

人们发现类方法的一种用途是创建可继承的替代构造函数。

使用

staticmethods
时,
self
(对象实例)和
cls
(类)都不会隐式传递为第一个参数。它们的行为类似于普通函数,只是你可以从实例或类中调用它们:

a.static_foo(1)# executing static_foo(1)A.static_foo('hi')# executing static_foo(hi)

静态方法用于对与类之间具有某种逻辑联系的函数进行分组。

foo
只是一个函数,但是当你调用
a.foo
它时,不仅获得该函数,还会获得该函数的“部分应用”版本,该对象实例
a
绑定为该函数的第一个参数。
foo
期望有2个参数,而
a.foo
只期望有1个参数。

a
foo
绑定。这就是下面“绑定”一词的含义:

print(a.foo)# <bound method A.foo of <__main__.A object at 0xb7d52f0c>>

a.class_foo
a
不绑定
class_foo
,而是与类A绑定
class_foo

print(a.class_foo)# <bound method type.class_foo of <class '__main__.A'>>

在这里,使用静态方法,即使它是一种方法,也

a.static_foo
只返回一个没有参数绑定的良好的
'ole
函数。
static_foo
期望有1个参数,也
a.static_foo
期望有1个参数。

print(a.static_foo)# <function static_foo at 0xb7d479cc>

当然,当你

static_foo
使用类进行调用时,也会发生同样的事情
A

print(A.static_foo)# <function static_foo at 0xb7d479cc>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369368.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号