小编Gar*_*ett的帖子

使用类委托时,是否有办法覆盖委托对象的方法使用的成员?

在 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)

kotlin

6
推荐指数
1
解决办法
3613
查看次数

Python:当sys.stdin的值被更改时,如何使用GNU readline?

我希望我的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的值,我愿意接受建议.

python stdin readline tty

5
推荐指数
1
解决办法
171
查看次数

标签 统计

kotlin ×1

python ×1

readline ×1

stdin ×1

tty ×1