在Python中定义类的方法时,它看起来像这样:
class MyClass(object):
def __init__(self, x, y):
self.x = x
self.y = y
但是在其他一些语言中,比如c#,你有一个对象的引用,这个对象是用"this"关键字绑定的,而不是在方法原型中作为参数声明的。
这是Python中有意的语言设计决策,还是有一些实现细节需要传递“self”作为参数?
在Python中定义类的方法时,它看起来像这样:
class MyClass(object):
def __init__(self, x, y):
self.x = x
self.y = y
但是在其他一些语言中,比如c#,你有一个对象的引用,这个对象是用"this"关键字绑定的,而不是在方法原型中作为参数声明的。
这是Python中有意的语言设计决策,还是有一些实现细节需要传递“self”作为参数?
当前回答
还有另一个非常简单的答案:根据python的禅宗,“显式比隐式好”。
其他回答
这是为了最小化方法和函数之间的差异。它允许您轻松地在元类中生成方法,或在运行时向已存在的类添加方法。
e.g.
>>> class C:
... 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运行时的实现更容易。
我喜欢引用彼得斯的《Python禅》。“明确的比含蓄的好。”
在Java和c++中,'this。'可以被推导出来,除非你的变量名使它无法推导。所以你有时需要它,有时不需要。
Python选择显式地做这样的事情,而不是基于规则。
此外,由于没有隐含或假设任何内容,部分实现将被公开。自我。__class__进行自我。__dict__和其他“内部”结构可以以一种明显的方式使用。
还有另一个非常简单的答案:根据python的禅宗,“显式比隐式好”。
Python不会强制你使用"self"。你可以给它起任何你想要的名字。你只需要记住方法定义头中的第一个参数是对对象的引用。
self形参保存当前调用对象。
class class_name:
class_variable
def method_name(self,arg):
self.var=arg
obj=class_name()
obj.method_name()
在这里,self参数保存对象obj。因此,语句self。Var表示obj.var