gpt4 book ai didi

Python与类变量的初始化——如何使用类方法初始化成员?

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:19 25 4
gpt4 key购买 nike

我想用类方法初始化类成员,但不知道如何调用它。

您能否提出一些解决方案 - 也许它非常简单但我找不到解决方案?

这段代码不起作用 - 我不知道为什么?

class X(object):
@staticmethod
def __Y():
return 1

CONSTANT = __Y()


x = X()
print x.CONSTANT

这会起作用,但我需要使用调用方法来初始化类成员。

class X(object):
CONSTANT = 1

x = X()
print x.CONSTANT

注意,我不想初始化对象变量,而是类变量。

最佳答案

删除 @staticmethod 装饰器,第一种方法也可以工作。您不需要 staticmethod 就可以在类语句中调用函数。

因为这样函数在从类实例调用时将不可用,所以在使用后也将其删除是一种习惯用法。在你的例子中:

class X(object):
def __y():
return 1

CONSTANT = __y()
# ... other uses of __y, if any
del __y

要了解您的方法为何不起作用,请考虑 staticmethod 的作用。它将普通函数包装到 descriptor object 中即,当从类中检索时,会生成未更改的原始函数,即没有通常的“绑定(bind)方法”语义。 (从实例或类中检索普通的 def 函数将为您提供一个绑定(bind)方法,该方法会自动插入 self 作为第一个参数。)

但是,staticmethod 返回的描述符本身是不可调用的,它的唯一功能是在通过类或实例访问时生成可调用对象。 Proposals使 staticmethod 描述符可调用被拒绝,因为这样使用 staticmethoderroneous in the first place .

关于Python与类变量的初始化——如何使用类方法初始化成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16456878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com