相关疑难解决方法(0)

如何指定方法的返回类型与python中的类本身相同?

我在python 3中有以下代码:

class Position:

    def __init__(self, x: int, y: int):
        self.x = x
        self.y = y

    def __add__(self, other: Position) -> Position:
        return Position(self.x + other.x, self.y + other.y)
Run Code Online (Sandbox Code Playgroud)

但是我的编辑器(PyCharm)说无法解析引用位置(在_add__方法中).我该如何指定我希望返回类型是类型__add__

编辑:我认为这实际上是一个PyCharm问题.它实际上使用其警告中的信息和代码完成

但如果我错了,请纠正我,并需要使用其他语法.

python typing pycharm python-3.x python-3.5

277
推荐指数
7
解决办法
4万
查看次数

类型为(self)的方法签名参数

当我定义一个类时,如何在其方法的签名中包含必须属于同一类的参数?我正在构建一个应该像这样工作的图形结构,但这里是一个简化的示例:

class Dummy:
    def __init__(self, value: int, previous: Dummy=None):
        self._value = value
        self._previous = previous

    @property
    def value(self):
        return self._value

    def plus_previous(self):
        return self.value + self._previous.value

d1 = Dummy(7)
d2 = Dummy(3, d1)
d2.plus_previous()
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

NameError: name 'Dummy' is not defined
Run Code Online (Sandbox Code Playgroud)

我的意思是,我可以用 Python 2 的方式来做,但我希望有一个比这更多的 python-3-ic 解决方案:

class Dummy:
    def __init__(self, value: int, previous=None):
        assert type(previous) is Dummy or previous is None
        ...
Run Code Online (Sandbox Code Playgroud)

python oop methods method-signature python-3.x

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

自参考结构的python(3.7)数据类

随着python数据类装饰器的最新介绍,编写模型类非常容易。

但是我不确定如何在自引用结构/模型类的上下文中使用-例如LinkedList的内部ListNode / Node模型类。

>>> from dataclasses import dataclass
>>> from typing import Type
>>>
>>> @dataclass
... class Node:
...     data: int
...     link: Node
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in Node
NameError: name 'Node' is not defined
>>>
>>>
>>> @dataclass
... class Node:
...     data: int
...     link: Type[Node] # have tried Type hinting 
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module> …
Run Code Online (Sandbox Code Playgroud)

python-3.x python-3.7 python-dataclasses

5
推荐指数
0
解决办法
376
查看次数