我解释一下python的类方法为什么要写一个self参数

 我来答
日TimE寸
2015-08-07 · TA获得超过9568个赞
知道大有可为答主
回答量:1358
采纳率:83%
帮助的人:476万
展开全部
类(class)初始化之后会得到实例(instance)。
self就是用于代表初始化的到的实例。
明确地写一个self参数,使得类的方法(method)和普通的函数(function)本质上没有差异,所有的输入参数都显示地传递到方法/函数当中。
当然作为类的方法,作用的对象一定会是实例,因而在Python的设计之初,完全可以设计成self不作为一个参数,但是那样就需要一个关键字代表实例,比如在javascript中就是this。
然而Python的哲学是"Explicit is better than implicit.",显示要比隐示好,因此Python类的方法需要一个self参数代表实例是符合逻辑的。
育知同创教育
2018-07-05 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
self 表示类实例自身,相当于C++中的this
在类中用self可以引用类实例的成员,方法

class test:
def printhello(self):
print("hello")
def output(self):
self.printhello()
output中就使用self调用了类本身的printhello方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
从空去听8
2017-10-01 · TA获得超过7439个赞
知道大有可为答主
回答量:6907
采纳率:93%
帮助的人:5570万
展开全部
这是对前面一个php程序员问python方法为什么要手写一个self的回答,当时那个帖非常的热闹,但是下面没有一个回复讲到要点,等我有空,已经找不到原帖了。

原因有多重。首先是python中几乎所有的东西的一级对象(一级对象的定义),method也不例外,比如你写一个:
class X:
def f(self, a, b):
...
那么可以这样引用f:
X.__dict__['f']
或者
X.f.__func__

现在问题来了,得到f以后怎么调用?f是一个方法,方法必须作用于对象。如果x是一个X对象,我们可以x.f(...),但是如果是以上面的方式得到的f呢?怎么f让作用于某个对象?最直观的方法就是和参数一起传递进去。

当然的限不同的设计也可以满足上面制。比如不要手写的self参数,增加this关键字,增加一个调用f个格式。这样的设计和pep20第二条不符合。

为理解python的self,不妨对比一下ruby和javascript。ruby的方式是方法不是一级对象,所以绕过了这个问题。javascript没有类,方法在调用时this会绑定到方法所属的对象,函数调用时this绑定到window,函数做构造器调用时this绑定到新对象。这么多规则,比Python复杂。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式