簡體   English   中英

Python - 實例化 class 而不為實例分配名稱

[英]Python - Instantiating a class without assigning a name to the instance

Python 新手在這里!

下面的示例是關於實例化 class 然后為實例分配名稱與不分配實例化之間的區別。

在示例的最后三行中,首先在實例 (my_city) 上調用該方法,然后在沒有實例的情況下調用該方法。 所以:

  1. 有什么區別?
  2. 什么時候認為這是有用或可取的方法?
  3. 由於 Python 中的所有內容都是 object,那么最后一行中的 object 是什么在哪里
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()方法。

所以,實例仍然被創建,認為它沒有與任何對它的引用綁定。 我們可以說 object 在City("Tokyo")表達式中。 看看這個:

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

當您擁有static class 方法或@classmethod裝飾器時,可以看到幾乎相同類型的方法(看似直接在 class 上調用方法)。 例如:

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

這是在現實世界代碼中做同樣事情的更正確和更有可能的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM