__repr__方法中self和object参数有什么区别?

1 投票
3 回答
1841 浏览
提问于 2025-04-16 09:16

我已经知道旧式类(class Foo()...)和新式类(class Foo(object)...)之间的区别了。但是,这两者之间还有什么不同呢:

class Foo(object):
  def __repr__(self):
    return 'foo'

class Foo(object):
  def __repr__(object):
    return 'foo'

谢谢。

3 个回答

2

这就像是在说:

class Foo(object):
    def __init__(self):
        self.a="foo"
    def __repr__(bar):
        return bar.a

变量名 bar 本身没有任何意义。它只是指向 self 的一个引用。

2

正如其他人提到的,类方法中的第一个参数名字其实只是个约定,你可以随便起个名字。 但是不要这样做。一定要把它命名为 self,否则会让大家很困惑。特别是,你的例子里把它命名为 object,这会和一个内置的名字冲突,真是双重糟糕。

7

区别在于,在一种情况下你把保存实例的变量叫做 self,而在另一种情况下你把它叫做 object。这就是唯一的不同。

self 这个变量在 Python 中是明确的,你可以随便给它起个名字。self 只是大家为了让代码更易读而使用的约定。

比如,下面的写法也是可以的:

>>> class Foo(object):
...   def __init__(bippity, colour):
...     bippity.colour = colour
...   def get_colour(_):
...     return _.colour
... 
>>> f = Foo('Blue')
>>> f.get_colour()
'Blue'

不过,这样写起来就挺让人困惑的。:)

撰写回答