繁体   English   中英

使用该类的方法分配Python类变量

[英]Assign Python class variable with a method of that class

我有这样的代码:

def my_func():
    pass

class MyClass():
   class_variable = my_func()
   pass

i = MyClass()

由于my_func在逻辑上与MyClass相关,并且在它之外没有任何作用,所以我宁愿有这样的东西:

class MyClass():
   class_variable = my_func()

   def my_func():
       pass

i = MyClass()

当然,上面的方法不起作用,因为在my_func未定义它。 还有其他从类内部分配类变量的方法吗?

我个人my_func()放在课堂之外 当然,它只能用于类定义,但是如果一旦定义了类就没有用,则不应将其作为类API的一部分。

如果即使在类创建后仍应将my_func()函数与该类一起使用,则仍可以使用MyClass.my_func()作为静态方法来使该类起作用。 在这种情况下限定第一设置类变量之前的函数:

class MyClass():
   @staticmethod
   def my_func():
       pass

   class_variable = my_func.__func__()

@staticmethod方法不是严格必需的,因为在设置class_variablemy_func仍是类定义主体中的本地名称。

但是,由于无论如何都其用作静态函数,因此也可以将其标记为静态函数。 但是,优点是MyClass.my_func()现在也可以使用。

因为@staticmethod方法不会绑定到类或实例属性上下文之外,所以您确实需要通过使用__func__属性访问包装函数来首先对其进行包装。

演示:

>>> class MyClass():
...    @staticmethod
...    def my_func():
...        return 'foobar'
...    class_variable = my_func.__func__()
... 
>>> MyClass.class_variable
'foobar'
>>> MyClass.my_func()
'foobar'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM