首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用.format(self=self)?

如何使用.format(self=self)?
EN

Stack Overflow用户
提问于 2018-07-20 21:28:19
回答 3查看 2.7K关注 0票数 3

我看到一段代码是这样的:

代码语言:javascript
复制
class Car:
    def __init__(self,color,mileage):
        self.color = color
        self.mileage = mileage

    def __str__(self):
        return 'a {self.color} car'.format(self=self)

my_car = Car('blue', 13585)
print(my_car)

str方法中使用的self=self是如何工作的?

EN

回答 3

Stack Overflow用户

发布于 2018-07-20 21:35:12

代码语言:javascript
复制
def __str__(self):
        return 'a {self.color} car'.format(self=self)

self=self中的第一个self指的是format函数将在字符串中更改的内容。例如,它也可以是

代码语言:javascript
复制
'a {obj.color} car'.format(obj=self)

self=self中左侧的self指的是将要输入的实际值。在本例中,对象作为参数传递。换句话说,它也可能是

代码语言:javascript
复制
def __str__(obj):
        return 'a {self.color} car'.format(self=obj)

因此,对于整体视图,您可以使用

代码语言:javascript
复制
def __str__(value_passed):
        return 'a {value_to_change.color} car'.format(value_to_change=value_passed)

现在为什么要使用self__?

这只是python编程中使用的一种约定。Python会自动将一个对象传递给它的实例方法,该对象是指向它自己的指针。还可以查看this question以了解更多信息

票数 2
EN

Stack Overflow用户

发布于 2018-07-20 21:35:07

self在两个不同的上下文中使用;一个用作方法中的局部变量,另一个用作格式字符串中的标识符。您可以重命名其中一个或全部重命名,并得到相同的结果:

代码语言:javascript
复制
return "a {c.color} car".format(c=self)

代码语言:javascript
复制
def __str__(foo):
    return "a {self.color} car".format(self=foo)

甚至是

代码语言:javascript
复制
def __str__(foo):
    return "a {bar.color} car".format(bar=foo)

我倾向于三种方法中的第一种,因为没有充分的理由违反将实例方法的第一个参数命名为self的约定。

票数 1
EN

Stack Overflow用户

发布于 2018-07-20 21:34:51

第一个self ( =符号左侧)引用'a {self.color} car' (您可以随意命名).`中的self字符串

第二个self ( =符号的右侧)引用__str__()方法的第一个参数,该参数始终是对类的当前实例的引用。在您的示例中,这将替换为my_car

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51443620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档