微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以定义一个静态类成员及其所在类的类型?

如何解决是否可以定义一个静态类成员及其所在类的类型?

如何定义一个静态类成员,其类型与它所在的类相同?我直觉上是这样试的:

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,d):
    ...

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

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

我使用的是 Python 3.6.9。

解决方法

据我所知,这并不容易:(请参阅 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 模块中......那么在你的定义中你可以创建模块范围的“常量”来匹配你的类的不同实例。我想,那会是一个更好的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?