在 Kotlin 中使用类委托时,您可以覆盖成员。然而,关于授权的参考页说:
但请注意,以这种方式重写的成员不会从委托对象的成员中调用,委托对象只能访问其自己的接口成员实现。
我想重写委托对象的方法使用的属性,以便委托对象的方法调用此重写的属性。正如文档所述,使用关键字覆盖属性并override不能实现此目的。有没有办法可以实现这种行为?如果不是,这是否表明我应该使用继承?
这是一个代码示例:
interface Base {
val message: String
fun print()
}
class BaseImpl(val x: Int) : Base {
override val message = "BaseImpl: x = $x"
override fun print() { println(message) }
}
class Derived(b: Base) : Base by b {
// This property is not accessed from b's implementation of `print`
override val message = "Message of Derived"
}
fun main(args: Array<String>) {
val b = BaseImpl(10)
val derived = Derived(b) …Run Code Online (Sandbox Code Playgroud) 我希望我的Python程序从管道中获取输入,然后从终端获取输入.阅读此 SO帖子后,我尝试打开/ dev/tty来替换sys.stdin.
import sys
import readline
def tty_input(prompt):
with open("/dev/tty") as terminal:
sys.stdin = terminal
user_input = input(prompt)
sys.stdin = sys.__stdin__
return user_input
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是当sys.stdin!= sys .__ stdin__时,GNU readline不起作用.我无法使用箭头键移动光标或导航历史记录.我读到了这里提交的这个问题的补丁,但我猜测没有任何结果.
如果有办法接受来自管道和终端的输入而不改变sys.stdin的值,我愿意接受建议.