创建没有实例的静态类

格雷格·佩克里(Greg Peckory):

我在网上看到的所有教程都展示了如何使用__init__构造函数方法创建类,以便可以声明该类型的对象或该类的实例。

如何创建一个类(Java中的静态类),以便无需创建新的实例/对象就可以访问该类的所有方法和属性

例如:

class World:

    allElems = []

    def addElem(x):  

        allElems.append(x)

World.addElem(6)
print(World.allElems)

编辑

class World(object):

    allAirports = []

    @staticmethod
    def initialize():

        f = open(os.path.expanduser("~/Desktop/1000airports.csv"))
        file_reader = csv.reader(f)

        for col in file_reader:

            allAirports.append(Airport(col[0],col[2],col[3]))

错误:未定义名称“ allAirports”

迈克尔·亚伦·萨菲恩(Michael Aaron Safyan):

创建静态类的Pythonic方法只是在类之外声明这些方法(Java将类用于对象和对相关函数进行分组,但是Python模块足以对不需要任何对象实例的相关函数进行分组)。但是,如果您坚持在类级别上创建不需要实例的方法(而不是简单地使其成为模块中的独立函数),则可以使用“ @staticmethod”装饰器来实现。

也就是说,Python方式是:

# My module
elements = []

def add_element(x):
  elements.append(x)

但是,如果要镜像Java的结构,则可以执行以下操作:

# My module
class World(object):
  elements = []

  @staticmethod
  def add_element(x):
    World.elements.append(x)

您还可以做到这一点@classmethod,如果你愿意知道具体的类(如果你想允许通过一个类继承此类继承的静态方法,它可以很方便):

# My module
class World(object):
  elements = []

  @classmethod
  def add_element(cls, x):
    cls.elements.append(x)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在非静态方法中调用没有类实例的非静态方法

OWL API-创建没有实例的类

如何创建没有实例变量的枚举类?

在Java中创建静态嵌套类的实例

C#:“无法创建静态类的实例”

无法创建静态类“随机”的实例

如何从(静态)类中的类创建新的类实例?

没有 ELB 的 Fargate 实例的静态 IP

如何从抽象类的静态方法创建具体类的实例

创建类的静态属性(属性是同一类的实例)

有没有一种方法可以在Java中创建公共静态类?

为什么我没有创建类的实例,但还是从类中打印了(x)?

在静态类C#中没有静态嵌套类

实例化一个非静态类以在没有继承的情况下跨其他类使用

有没有办法找出哪个类实例创建了“ this”

如何在没有引用的情况下创建静态类对象?

没有静态的类中的 constexpr

无法创建静态类“ System.Tuple”的实例

TypeScript在静态上下文中从类创建新实例

在自身内部创建类的静态实例的正确方法

是您首次调用静态方法时自动创建的类的实例

静态字段 - 如果仅从类创建一个实例

如何创建返回类本身实例的静态类属性?

通过继承的静态方法创建继承类的新实例

创建类的新实例时,在通用方法中没有此类方法异常

在python中创建和比较没有变量分配的类实例

在玩笑测试中调用new class()之后,没有创建新的类实例

创建的 CMake 静态库没有符号

静态类或实例指针