Python - 在不为实例分配名称的情况下实例化 class
Python - Instantiating a class without assigning a name to the instance
这里是Python新手!
下面的示例是关于实例化一个 class 然后为实例分配名称和不分配实例的区别。
在示例的最后三行中,方法首先在实例 (my_city) 上调用,然后在没有实例的情况下调用。所以:
- 有什么区别?
- 什么时候认为这种方法有用或更可取?
- 由于 Python 中的所有内容都是对象,所以 what 或 where 是最后一行中的对象?
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
这是在现实世界代码中做同样事情的更正确和更有可能的方法。
这里是Python新手!
下面的示例是关于实例化一个 class 然后为实例分配名称和不分配实例的区别。
在示例的最后三行中,方法首先在实例 (my_city) 上调用,然后在没有实例的情况下调用。所以:
- 有什么区别?
- 什么时候认为这种方法有用或更可取?
- 由于 Python 中的所有内容都是对象,所以 what 或 where 是最后一行中的对象?
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
这是在现实世界代码中做同样事情的更正确和更有可能的方法。