【问题标题】:Is it possible to define a static class member with type of the class it is in?是否可以使用它所在的类的类型定义一个静态类成员?
【发布时间】:2021-08-17 21:27:45
【问题描述】:

我怎样才能定义一个静态类成员与它所在的同一个类的类型?我凭直觉这样尝试:

class A:
  def __init__(self,a,b,c,d):
    ...
  default_element = A(1,2,3,4)

这给出了错误

名称“A”未定义

这将使设置/重置的代码简短而有条理。 有一些解决方法,例如

class A:
  def __init__(self,a=1,b=2,c=3,d=4):
    ...

class A:
  def __init__(self,a,b,c,d):
    ...

  @staticmethod
  def getDefault():
    return A(1,2,3,4)

但如果可能的话,我更喜欢默认元素,所以我们实际上有一个代表默认值的对象,而不是一个方法,你只能有一组默认值,而使用首选选项我可以有多个不同的模板-对象。

我使用的是 Python 3.6.9。

【问题讨论】:

  • 创建类后,您必须这样做,A.default_element = A(...)

标签: python python-3.x oop static class-variables


【解决方案1】:

据我了解,这并不容易:(请参阅https://stackoverflow.com/a/27568860/1256837 中的“需要注意的问题”)

但是有一个轻微的解决方法,我关注您需要提供不同的模板:

class _A:

    def __init__(self, a=None):
        self.a = a

    def blubb(self):
        return self.a**2

class A(_A):
    template_default = _A(0)
    template_1 = _A(5)

assert A.template_default.blubb() == 0
assert A.template_1.blubb() == 25
assert A(50).blubb() == 2500

但是,我认为这段代码有异味:我认为这不是一个好的做法。

但是,如果您要将此类放在 python 模块中……那么在您的定义中,您可以创建模块范围的“常量”,以匹配您的类的不同实例化。我想那会是更好的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-27
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多