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

时间:2018-07-20 13:28:19

标签: python class

我看到了一段像这样的代码:

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如何工作?

3 个答案:

答案 0 :(得分:1)

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

return "a {c.color} car".format(c=self)

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

甚至

def __str__(foo):
    return "a {bar.color} car".format(bar=foo)

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

答案 1 :(得分:1)

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

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

'a {obj.color} car'.format(obj=self)

self中的左侧self=self表示将要输入的实际值。在这种情况下,对象作为参数传递。换句话说,也可能是

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

因此,对于整体视图,您拥有

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

现在为什么要使用self

这只是python编程中使用的约定。 Python自动将一个指向自身的对象传递给其实例方法。也可以查看this question以获得更多信息

答案 2 :(得分:0)

第一个self(在=的左侧)指的是'a {self.color} car'中的自身字符串(您可以根据需要调用它)。

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