【发布时间】:2022-07-04 14:23:43
【问题描述】:
如何在 Python 3 中禁止直接创建对象?
class A:
def create(self):
return B()
class B:
pass
b = B() # FORBIDDEN
a = A()
a.create() # ALLOWED
【问题讨论】:
-
为什么你想这样做?这可能是XY problem。
-
您可能会尝试在您的 B 类中定义 B.__init__(self, a = false) 如果 a 为 false,则会引发异常。在 A.create() 中,您可以调用 B(true) 而不是 B()。所以调用 B() 会引发异常。你为什么要这样做?
-
在python中你永远不能真正禁止事情,只是最终让它变得更烦人,但真正的问题确实是你为什么需要它,看起来像一个X-Y问题;)
-
我只想将这种方式的 api 提供给即时 B(),以避免 B() 出现一些不需要的参数。
-
您可以使用与创建单例相同的方法(请参阅stackoverflow.com/questions/6760685/…)
标签: python