为了账号安全,请及时绑定邮箱和手机立即绑定

为什么需要在Python方法中明确地使用“self”参数?

为什么需要在Python方法中明确地使用“self”参数?

慕田峪7331174 2019-07-23 19:29:38
为什么需要在Python方法中明确地使用“self”参数?在Python中定义类的方法时,它看起来像这样:class MyClass(object):     def __init__(self, x, y):         self.x = x         self.y = y但是在其他一些语言中,例如C#,您可以使用“this”关键字引用该方法绑定的对象,而不将其声明为方法原型中的参数。这是一个有意的语言设计决策在Python或是否有一些实现细节需要传递“自我”作为参数?
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我想引用Peters的Python禅。“明确比隐含更好。”

在Java和C ++中,this.可以推导出' ',除非你有可变名称使其无法推断。所以你有时需要它,有时却不需要它。

Python选择将这样的内容显式化而不是基于规则。

此外,由于没有任何暗示或假设,因此公开了部分实现。 self.__class__self.__dict__和其他“内部”结构,一个明显的方式可供选择。


查看完整回答
反对 回复 2019-07-23
?
慕尼黑的夜晚无繁华

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运行时的实现更容易。


查看完整回答
反对 回复 2019-07-23
?
精慕HU

TA贡献1845条经验 获得超8个赞

我建议人们应该阅读Guido van Rossum关于这个主题的博客 - 为什么显性自我必须留下来

当一个方法定义被装饰时,我们不知道是否自动给它一个'self'参数:装饰器可以将函数转换为静态方法(没有'self'),或者类方法(有一种有趣的自我,指的是一个类而不是一个实例),或者它可以做一些完全不同的事情(编写一个在纯Python中实现'@classmethod'或'@staticmethod'的装饰器是微不足道的)。如果不知道装饰器是否赋予使用隐式“自”参数定义的方法的作用,就没有办法。

我拒绝像特殊套管'@classmethod'和'@staticmethod'这样的黑客攻击。


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 1100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信