代码之家  ›  专栏  ›  技术社区  ›  CIsForCookies

禁用类实例化的最佳实践

  •  1
  • CIsForCookies  · 技术社区  · 6 年前

    class A(object):
      X = 0
      @staticmethod
      def f():
        print X
    

    我还希望所有的it方法在没有实例的情况下使用,也就是说,我希望用户调用 A.f() 而不是 a = A(); a.f() .

    @abc.abstractmethod

    class A(object):
      X = 0
      @abc.abstractmethod
      def __init__(self):
        raise Exception('Should not be created!')
      @staticmethod
      def f():
        print X
    

    第二种选择是不使用抽象,因为它意味着继承,这不是我在这个类中设计的东西。在本例中,我将从这两个方面提出异常 __init__ __new__

    最佳做法是什么(第三种选择?)

    2 回复  |  直到 6 年前
        1
  •  2
  •   Mihai Andrei    6 年前

        2
  •  1
  •   Cesar Canassa    6 年前

    考虑到你问的是什么是“最佳实践”,而不是如何从技术上做到这一点,我可以回答你,最佳实践是不这样做;)我以前从未见过这样的构造,我相信它违反了两条Python“原则”:

    • 我们在这里都是成年人。

    我们都是成年人

    这个表达式也在面向对象的python文献中使用 Python没有。

    当您创建某个类的实例时,没有什么可以阻止的 你可以避免在里面闲逛和使用各种内部的、私人的 用于直接使用/访问。

    发件人: https://mail.python.org/pipermail/tutor/2003-October/025932.html

    最小惊讶原则适用于用户界面和 软件设计。这是一个典型的原则表述,从1984年开始, is:“如果一个必要的特性具有很高的惊人因素,它可能是

    更一般地说,原则意味着系统的一个组件 应该以大多数用户期望的方式行事;这个

    发件人: https://en.wikipedia.org/wiki/Principle_of_least_astonishment