Python - 在不为实例分配名称的情况下实例化 class

Python - Instantiating a class without assigning a name to the instance

这里是Python新手!

下面的示例是关于实例化一个 class 然后为实例分配名称和不分配实例的区别。

在示例的最后三行中,方法首先在实例 (my_city) 上调用,然后在没有实例的情况下调用。所以:

  1. 有什么区别?
  2. 什么时候认为这种方法有用或更可取?
  3. 由于 Python 中的所有内容都是对象,所以 whatwhere 是最后一行中的对象?
class City:
    def __init__(self, name):
        self.name = name

    def show_city_name(self):
        print(self.name)

my_city = City("Tokyo")
my_city.show_city_name()

City("Tokyo").show_city_name()

City("Tokyo").show_city_name() 语句导致创建 <class '__main__.City'> 类型的临时实例,在该实例上调用了 show_city_name() 方法。

所以,实例仍然被创建,认为它没有绑定任何对它的引用。我们可以说 City("Tokyo") 表达式中的对象。看看这个:

>>> type(City('Foo'))
<class '__main__.City'> # Means it is an instance of the City class

当你有 static class 方法或 @classmethod 装饰器。例如:

class Circle:
    def __init__(self, radius):
        self.radius = radius

    # other definitions

    @classmethod
    def unit_circle(cls):
        return cls(1)

unit_c = Circle.unit_circle()

print(unit_c.radius)
# Prints 1

这是在现实世界代码中做同样事情的更正确和更有可能的方法。