【发布时间】:2011-09-08 13:36:50
【问题描述】:
我想使用可以插入类的方法创建轻量级接口。这是 Scala 中的一个简短示例:
class DB {
def find(id: String) = ...
}
trait Transformation extends DB {
def transform(obj: String): String
override def find(id: String) =
transform(super.find(id))
}
trait Cache extends DB {
val cache = Cache()
override def find(id: String) = {
...
if (cache.contains(id))
cache.find(id)
else {
cache.set(id, super.find(id))
cache.get(id)
}
}
}
通过这些类(特征),我们可以使用 Transformation、Cache 或两者来实例化 DB 类。注意,Transformation 有一个抽象方法 transform,仍然需要在具体的类中实现。
new DB() with Transformation {
def transform(obj: String): obj.toLower()
}
new DB() with Cache
new DB() with Transformation with Cache {
def transform(obj: String): obj.toLower()
}
有没有办法在 Python 中实现这样的功能?我知道 Python 有一个 Traits 包,但它的用途似乎不同。
【问题讨论】:
-
我知道有一个关于“类装饰器”的提议。如果您不关心特殊语法,您可以自己实现它。
标签: python scala language-comparisons