在 Scala 中我可以定义一个抽象类并用一个对象来实现它:
abstrac class Base {
def doSomething(x: Int): Int
}
object MySingletonAndLiteralObject extends Base {
override def doSomething(x: Int) = x*x
}
我在 Python 中的具体示例:
class Book(Resource):
path = "/book/{id}"
def get(request):
return aBook
继承在这里没有意义,因为没有两个类可以有相同的路径
。而且只需要一个实例,这样类就不会充当对象的蓝图。换句话说:此处不需要 Resource
(在我的示例中为 Book
)类,但需要基类来提供通用功能。
我想要:
object Book(Resource):
path = "/book/{id}"
def get(request):
return aBook
Python 3 的实现方式是什么?
最佳答案
在创建时使用装饰器将继承类转换为对象
我相信这种对象的概念不是 Python 中的典型编码方式,但如果您必须这样做,那么下面用于立即初始化的装饰器 class_to_object
就可以解决问题。请注意,任何用于对象初始化的参数都必须通过装饰器传递:
def class_to_object(*args):
def c2obj(cls):
return cls(*args)
return c2obj
使用这个装饰器我们得到
>>> @class_to_object(42)
... class K(object):
... def __init__(self, value):
... self.value = value
...
>>> K
<__main__.K object at 0x38f510>
>>> K.value
42
最终结果是您有一个对象 K
类似于您的 scala 对象,并且命名空间中没有类可以从中初始化其他对象。
注意:为了迂腐,对象 K 的类可以作为 K.__class__
检索,因此如果有人真的想要,可以初始化其他对象。在 Python 中,如果您确实需要,几乎总有办法解决问题。
关于python - Python 是否支持文字对象之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3520052/