您现在的位置是:首页 >

解释性语言 python 我解释一下python的类方法为什么要写一个self引数

火烧 2022-06-24 09:09:22 1064
我解释一下 ytho 的类方法为什么要写一个 elf引数 我解释一下 ytho 的类方法为什么要写一个 elf引数可以理解为 elf包含了cla 里面所有的 elf.xx引数,如果不写 elf,cla

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

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

可以理解为self包含了class里面所有的self.xx引数,如果不写self,class下面的方法就没有知道引数的数值了.

解释性语言 python 我解释一下python的类方法为什么要写一个self引数

self 表示类例项自身,相当于C++中的this
在类中用self可以引用类例项的成员,方法

class test:
def printhello(self):
print("hello")
def output(self):
self.printhello()
output中就使用self呼叫了类本身的printhello方法

这是对前面一个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复杂。

Python要self的理由Python的类的方法和普通的函式有一个很明显的区别,在类的方法必须有个额外的第一个引数 (self ),但在呼叫这个方法的时候不必为这个引数赋值 (显胜于隐 的引发)。

第一个引数写self是指定为例项方法不是类方法、类方法要用@classmethod装饰,
self其实也可以用必带名字代替的。
具体可以参考这篇文章 :python.jobbole./81921/

类(class)初始化之后会得到例项(instance)。self就是用于代表初始化的到的例项。明确地写一个self引数,使得类的方法(method)和普通的函式(function)本质上没有差异,所有的输入引数都显示地传递到方法/函式当中。当然作为类的方法,作用的对

  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码