class Parent: def getSelf(self) -> "Parent": return self class Child(Parent): # 这儿继承 Parent 类, self.getSelf 应当返回"Child", 但是类型提示中仍然是"Parent" # 难道每一个继承 Parent 类的, 都要重新声明 getSelf 函数吗? # ... def getSelf(self) -> "Child": return self
![]() | 1 zhoudaiyu PRO |
![]() | 2 zachlhb 2020-04-20 18:11:02 +08:00 via Android 写 self 呢,其实可以不用写返回类型 |
![]() | 3 Acebiu 2020-04-20 18:24:56 +08:00 ![]() T = TypeVar('T', bound='Parent') class Parent: def get_self(self) -> T: return self class Child(Parent): pass |
![]() | 4 wellsc 2020-04-20 18:25:52 +08:00 via Android 不用返回 |
5 Hstar 2020-04-20 18:30:03 +08:00 这代码怎么看起来一股 Java 味 |
![]() | 6 InkStone 2020-04-20 18:31:25 +08:00 如果你不重新声明的话,返回类型确实是 Parent 而不是 Child 啊。 |
![]() | 7 Trim21 2020-04-20 18:33:38 +08:00 via Android ![]() 感觉 3 楼回复还要稍微改一下 def get_self(self: T) -> T: |
![]() | 8 Trim21 2020-04-20 18:39:45 +08:00 via Android ![]() |
![]() | 9 lithbitren 2020-04-20 20:38:38 +08:00 一股 java 味,真实 |
10 Liyiw 2020-04-20 20:54:13 +08:00 学到了 |
![]() | 11 0dJ6Tu8Za734L89T 2020-04-20 20:54:33 +08:00 这怎么一股 Java 味。。。 |
![]() | 12 zhustec 2020-04-20 21:05:53 +08:00 via Android 我之前也碰到类似的问题就是使用 dataclass 和 typing 时如何只是当前类,比如写链表时节点类表示指向下一个节点。 |
13 lxy42 2020-04-20 21:40:56 +08:00 网上查了一下, 这个 issue 使用了前面两位提到的 TypeVar 方法: https://github.com/python/typing/issues/271 |
![]() | 14 zhoudaiyu PRO |
![]() | 16 raymanr 2020-04-20 22:10:19 +08:00 呃,没看懂,干嘛返回自身这个实例? |
![]() | 18 chenxytw 2020-04-21 00:02:07 +08:00 |
![]() | 19 xiaoming1992 OP |
![]() | 20 xiaoming1992 OP @chenxytw 字符串确实能解决,但是我不可能每一个继承的自带都重写一下,如果我有十几个类要继承,总不能都重写一下吧(虽然我目前就是这么做的。。。) |
21 calease 2020-04-21 06:56:15 +08:00 |
![]() | 22 lizytalk 2020-04-21 09:10:59 +08:00 via iPhone 用引号包起来就行了 |
![]() | 23 InkStone 2020-04-21 09:38:31 +08:00 @xiaoming1992 type hint 其实就是把函数当静态类型来推理,一个函数只能有一种返回值,那自然就是父类类型。至于实际返回的对象是什么类型,这是另外一回事。这个 type hint 确实没错,只是它跟你的理解不太一样。 |
![]() | 24 xiaoming1992 OP @InkStone 我只是看到,同样的代码,ts 里面的类型推断是正确的,但是 py 不正确,所以希望看看有没有什么方法能实现 |
![]() | 25 bnm965321 2020-04-21 09:52:36 +08:00 是 Pycharm IDE 提示不正确,还是 mypy typecheck 不正确? |
![]() | 26 chenxytw 2020-04-21 19:18:01 +08:00 @xiaoming1992 没针对你的问题啦....你这个问题我也不知道....也是进来学习的 Orz.... |
![]() | 27 xiaoming1992 OP @bnm965321 vscode python 插件的智能提示 |