Python中self字的用途是什么?我知道它指的是从该类创建的特定对象,但我不明白为什么它需要显式地作为参数添加到每个函数中.举例来说,在Ruby中,我可以做到:

class myClass
    def myFunc(name)
        @name = name
    end
end

我很容易理解.但是在Python中,我需要包括self个:

class myClass:
    def myFunc(self, name):
        self.name = name

有人能告诉我这件事吗?这不是我在我的(诚然有限的)经历中遇到的事情.

推荐答案

之所以需要使用self.,是因为Python不使用@语法来引用实例属性.Python决定以一种方式执行方法,使该方法所属的实例自动为passed,而不是自动为received:方法的第一个参数是调用该方法的实例.这使得方法与函数完全相同,实际名称由您决定(尽管self是惯例,当您使用其他方法时,人们通常会对您皱眉)self对代码来说并不特殊,它只是另一个对象.

Python本来可以做一些其他的事情来区分普通名称和属性--像Ruby那样的特殊语法,或者需要像C++和Java这样的声明,或者更不同的声明--但是它没有做到.Python的所有功能都是为了让事情变得明确,让什么是什么变得显而易见,虽然它不是在所有地方都这样做,但是它确实对属性做了这样的事情.这就是分配给实例属性需要知道要分配给哪个实例的原因,这也是它需要self.个实例的原因.

Python相关问答推荐

如何创建多个继承类的实例?

使用 dask 将 iterable.product 的核心转换为 numpy/dask 数组(创建每个重复排列的矩阵)

mypy call-arg 错误,其中设置了默认参数

组合数组的相似元素

是否可以通过 memmap 支持在磁盘上将布尔 numpy 数组保存为每个元素 1 位?

如何根据 Pandas 中的索引级别设置行值?

使用 workalendar 生成多年假期的 DataFrame

如何在 map 中插入点

使用其他爬取信息的scrapy图像管道文件名

如何加快 aiohttp 解析器 bs4?

基于布尔值 pandas df 的高亮元素

根据 Pandas Groupby 中的组合标准添加新列

在python中用浮点表示搜索和替换特定字符串

正则表达式.获取两个括号之间的字符串(python)

查找元组列表字典

是否有通用的正则表达式方法可以结合这些条件?

numpy.linalg.det 的时间复杂度是多少?

如何使用模型字典对分组的 DataFrame 进行预测并返回到原始测试 DataFrame?

Python:为什么 pip install 不从 sdist 部署我的代码?

在单个项目上“迭代”的pythonic方式是什么?