Python-在类属性字典中插入静态类方法值
如何执行此操作(没有init): 我试过:Python-在类属性字典中插入静态类方法值,python,class,static-methods,Python,Class,Static Methods,如何执行此操作(没有init): 我试过: my_dict = { "foo_val": lambda: Test.Foo(), } 当然,lamda函数是存储的,而不是它的结果 (此示例已简化)这里有几个备选方案: 在使用staticmethod装饰函数之前调用该函数: class Test(Objekt, UserMixin): def Foo(): return 1 my_dict = {
my_dict = {
"foo_val": lambda: Test.Foo(),
}
当然,lamda函数是存储的,而不是它的结果
(此示例已简化)这里有几个备选方案: 在使用
staticmethod
装饰函数之前调用该函数:
class Test(Objekt, UserMixin):
def Foo():
return 1
my_dict = {
"foo_val": Foo(),
}
Foo = staticmethod(Foo)
或者,将其添加到class语句之外的字典中:
class Test(Objekt, UserMixin):
my_dict = {}
@staticmethod
def Foo():
return 1
Test.my_dict["foo_val"] = Test.Foo()
最后,使用staticmethod
对象的\uuuu func\uuu
属性:
class Test(Objekt, UserMixin):
@staticmethod
def Foo():
return 1
my_dict = {
"foo_val": Foo.__func__(),
}
坦率地说,我不确定这三种方法中哪一种是最干净的。您可以将
my_dict
声明为property
@property
def my_dict(self):
return {"foo_val": Test.Foo()}
一种方法是将
my_dict
声明为类属性(或普通实例属性,如果对您的用例没有问题的话,这将避免您使用classproperty
类)
输出:
{'foo_val': 1}
使用普通属性:
class Test():
@staticmethod
def Foo():
return 1
@property
def my_dict(cls):
return {
"foo_val": cls.Foo(),
}
print(Test().my_dict) # notice that this requires to create an instance!
另一种方法可能是
my_dict
class Test(Objekt, UserMixin):
@staticmethod
def Foo():
return Test.my_dict["foo_val"]
my_dict = {
"foo_val": 1,
}
如前所述,这是一个特殊情况,“foo_val”条目必须是该条的条目!因此,我认为这是一个有效的解决办法。否则我会选择本线程中提到的其他解决方案之一在这里使用
classmethod
有什么意义?为什么不干脆:返回self.fget.\uu获取(所有者)(
?@juanpa.arrivillaga很好,我会更新我的答案。
class Test():
@staticmethod
def Foo():
return 1
@property
def my_dict(cls):
return {
"foo_val": cls.Foo(),
}
print(Test().my_dict) # notice that this requires to create an instance!
class Test(Objekt, UserMixin):
@staticmethod
def Foo():
return Test.my_dict["foo_val"]
my_dict = {
"foo_val": 1,
}