【发布时间】:2018-01-12 07:43:13
【问题描述】:
Python 是否有用于类构造函数的机制,即在第一次引用类时调用的函数(而不是在创建该对象的实例时)?我知道这存在于其他一些语言中,但我在 Python 中没有遇到过。
基本上,我想在该函数中初始化一些静态属性。我在下面举了一个我期望的例子。当然,该示例返回 None,但我希望它返回 'foo'。
class T:
arg = None
def __class_constructor__():
T.arg = 'foo'
print(T.arg) # returns None
为避免混淆:我很清楚对象构造函数,但这不是我想要的,因为它仅在创建第一个对象时调用,而不是在创建之前:
class T:
arg = None
def __init__(self):
type(self).arg = 'foo'
print(T.arg) # returns None
obj = T()
print(T.arg) # returns 'foo'
【问题讨论】:
-
为什么不
class T: arg = 'foo'...?class关键字是“类构造函数”。 -
除非该值取决于您定义类时不可用的信息,否则您没有理由不能这样做。请提供一些细节?
-
@EliasMi 您可以在
__class_constructor__中编写的任何代码,您也可以在类本身中编写。它的功能丝毫不逊色。 -
好的,所以:不,没有“在类第一次引用时启动的类构造函数。”该类的第一个引用是
class T。唯一的下一个机会是实例创建时间。因此,您必须更详细地了解您的实际问题,以便我们推荐一种 Pythonic 方法来解决它。 -
实际上,你是对的——这行得通:
class T: arg = 0 for i in range(4): arg += i print(T.arg) # returns 6。我只是从没想过在类头中添加实际代码
标签: python class oop constructor