3 回答

TA贡献1805条经验 获得超9个赞
我想引用Peters的Python禅。“明确比隐含更好。”
在Java和C ++中,this.
可以推导出' ',除非你有可变名称使其无法推断。所以你有时需要它,有时却不需要它。
Python选择将这样的内容显式化而不是基于规则。
此外,由于没有任何暗示或假设,因此公开了部分实现。 self.__class__
,self.__dict__
和其他“内部”结构,一个明显的方式可供选择。

TA贡献1864条经验 获得超6个赞
这是为了最小化方法和功能之间的差异。它允许您轻松地在元类中生成方法,或者在运行时将方法添加到预先存在的类中。
例如
>>> class C(object):
... def foo(self):
... print "Hi!"
...
>>>
>>> def bar(self):
... print "Bork bork bork!"
...
>>>
>>> c = C()
>>> C.bar = bar
>>> c.bar()
Bork bork bork!
>>> c.foo()
Hi!
>>>
它(据我所知)也使python运行时的实现更容易。

TA贡献1845条经验 获得超8个赞
我建议人们应该阅读Guido van Rossum关于这个主题的博客 - 为什么显性自我必须留下来。
当一个方法定义被装饰时,我们不知道是否自动给它一个'self'参数:装饰器可以将函数转换为静态方法(没有'self'),或者类方法(有一种有趣的自我,指的是一个类而不是一个实例),或者它可以做一些完全不同的事情(编写一个在纯Python中实现'@classmethod'或'@staticmethod'的装饰器是微不足道的)。如果不知道装饰器是否赋予使用隐式“自”参数定义的方法的作用,就没有办法。
我拒绝像特殊套管'@classmethod'和'@staticmethod'这样的黑客攻击。
添加回答
举报