我看到了一段像这样的代码:
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如何工作?
答案 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
。