我在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问题.它实际上使用其警告中的信息和代码完成

但如果我错了,请纠正我,并需要使用其他语法.
我正在阅读一个幻灯片,上面写着"JavaScript是无类型的".这与我认为的真实相矛盾,所以我开始尝试去学习更多.
JavaScript的每个答案都是一种无类型的语言?他说,JavaScript 不是无类型的,并且提供了各种形式的静态,动态,强大和弱类型的例子,这些都是我熟悉和满意的......所以这不是可行的方法.
所以我问了JavaScript的创建者Brendan Eich,他说:
学术类型使用"无类型"来表示"无静态类型".他们足够聪明,可以看到价值观有类型(呃!).背景问题.
以学术为中心的计算机科学人员是否使用"无类型"作为"动态类型"的同义词(并且这是有效的吗?)还是有更深层次的东西让我失踪?我同意布兰登的观点,认为背景很重要,但任何解释的引用都会很棒,因为我目前的"去"书并没有在这个主题上发挥作用.
我想要明确这一点,以便我可以提高我的理解,因为即使维基百科也没有提到这种替代用法(无论如何我都能找到).如果我错了,我不想在将来使用该术语或质疑该术语的使用:-)
(我也看到一个顶级的Smalltalker说Smalltalk也是"无类型的",所以这不是一次性的,这就是让我完成这个任务!:-))
我一直在寻找提高工作效率的方法,而且我一直在阅读很多关于使用Dvorak键盘打字的知识.
看起来这对于写普通散文会更有成效,但编程呢?
我怀疑它会有效,因为在编程中使用分号,冒号,括号和&符号比在每天打字时更常见.
有没有人有这方面的经验?
长期使用vim的用户,您是将手指放在正常模式jkl;还是hjkl处于正常模式?
标准触摸打字告诉我们右手的原位,食指上有食指j,所以你的手指都在jkl;.
但标准的vim运动键是hjkl.
10年后我回到了vim (omg,当我没有注意的时候我老了)并发现自己倾向于hjkl......但是这样就更难输入右上角的字母,大括号等等.我想训练自己现在使用最有效/最实用的方法,而不是以后重新训练.
长期,铁杆vim用户,最佳做法是什么?
注意:
我正在尝试使用抽象基类的Python类型注释来编写一些接口.有没有办法注释可能的类型*args和**kwargs?
例如,如何表达函数的合理参数是一个int还是两个int?type(args)给人Tuple所以我的猜测是,注释类型Union[Tuple[int, int], Tuple[int]],但是这是行不通的.
from typing import Union, Tuple
def foo(*args: Union[Tuple[int, int], Tuple[int]]):
try:
i, j = args
return i + j
except ValueError:
assert len(args) == 1
i = args[0]
return i
# ok
print(foo((1,)))
print(foo((1, 2)))
# mypy does not like this
print(foo(1))
print(foo(1, 2))
Run Code Online (Sandbox Code Playgroud)
来自mypy的错误消息:
t.py: note: In function "foo":
t.py:6: error: Unsupported operand types for + ("tuple" and "Union[Tuple[int, int], Tuple[int]]") …Run Code Online (Sandbox Code Playgroud) 假设库X的打包文件包含一些接口.
interface I1 {
x: any;
}
interface I2 {
y: {
a: I1,
b: I1,
c: I1
}
z: any
}
Run Code Online (Sandbox Code Playgroud)
为了使用这个库,我需要传递一个与其完全相同的对象I2.y.我当然可以在源文件中创建相同的界面:
interface MyInterface {
a: I1,
b: I1,
c: I1
}
let myVar: MyInterface;
Run Code Online (Sandbox Code Playgroud)
但是后来我承担了使用库中的那个保持最新的负担,而且它可能非常大并导致大量代码重复.
因此,有没有办法"提取"接口的这个特定属性的类型?类似的东西let myVar: typeof I2.y(不起作用,导致"找不到名字I2"错误).提前致谢.
编辑:在TS Playground中玩了一下后,我注意到以下代码完全符合我的要求:
declare var x: I2;
let y: typeof x.y;
Run Code Online (Sandbox Code Playgroud)
但是,它需要x声明一个冗余变量.我正在寻找一种方法来实现这个没有这个声明.
我有一个EditText属性:
android:minLines="3"
Run Code Online (Sandbox Code Playgroud)
但是,当我开始输入时,它会在中间键入EditText.
有没有办法让这个开始在该EditText区域的左上角打字?
简单的问题:我在编译语言(如C++/Java)和Python/Javascript等解释语言中进行了大量编程(专业和个人).我个人发现,当我使用静态类型语言编程时,我的代码几乎总是更强大.但是,我遇到的几乎所有解释语言都使用动态类型(PHP,Perl,Python等).我知道为什么编译语言使用静态类型(大多数时候),但我无法弄清楚解释语言设计中对静态类型的厌恶.
为什么陡峭断开?它是解释语言性质的一部分吗?OOP?
type-systems language-design static-typing typing dynamic-typing
我看过typing.Callable,但没有找到任何有用的文档。到底是什么typing.Callable?
我想知道是否有一种编程语言可编译为机器代码/二进制文件(不是字节码然后由VM执行,在考虑打字时完全不同),它具有动态和/或弱类型,例如:
想一下编译语言,其中:
问题:
我认为一种动态但强大的类型化编译语言真的能感觉到,但它有可能吗?
typing ×10
python ×3
android ×1
center ×1
dvorak ×1
ergonomics ×1
javascript ×1
keyboard ×1
pycharm ×1
python-3.5 ×1
python-3.x ×1
touch-typing ×1
type-hinting ×1
type-systems ×1
typechecking ×1
types ×1
typescript ×1
vim ×1