python typing typescript_Python中Typescript的等价物

对于ide中的代码完成和类型提示,只需为Person和Address类添加静态类型,就可以了。假设您使用最新的python3.6,下面是示例中typescript类的大致等价物:# spam.py

from typing import Optional, Sequence

class Address:

street: str

housenumber: int

housenumber_postfix: Optional[str]

def __init__(self, street: str, housenumber: int,

housenumber_postfix: Optional[str] = None) -> None:

self.street = street

self.housenumber = housenumber

self.housenumber_postfix = housenumber_postfix

class Person:

name: str

adresses: Sequence[Address]

def __init__(self, name: str, adresses: Sequence[str]) -> None:

self.name = name

self.adresses = adresses

person = Person('Joe', [

Address('Sesame', 1),

Address('Baker', 221, housenumber_postfix='b')

]) # type: Person

我想您提到的样板是在添加类构造函数时出现的。这确实是不可撤销的。我希望默认构造函数在运行时生成,而不是显式声明,如下所示:class Address:

street: str

housenumber: int

housenumber_postfix: Optional[str]

class Person:

name: str

adresses: Sequence[Address]

if __name__ == '__main__':

alice = Person('Alice', [Address('spam', 1, housenumber_postfix='eggs')])

bob = Person('Bob', ()) # a tuple is also a sequence

但不幸的是你必须手工申报。

编辑

正如Michael0x2a在comment中指出的,在引入python3.7装饰器的@dataclass中,可以避免对默认构造函数的需要,因此可以声明:@dataclass

class Address:

street: str

housenumber: int

housenumber_postfix: Optional[str]

@dataclass

class Person:

name: str

adresses: Sequence[Address]

并获得几个方法的默认impl,从而减少样板代码的数量。查看PEP 557了解更多详细信息。

我想您可以看到从代码生成的存根文件,作为某种接口文件:$ stubgen spam # stubgen tool is part of mypy package

Created out/spam.pyi

生成的存根文件包含模块的所有非私有类和函数的类型化签名,但没有实现:# Stubs for spam (Python 3.6)

#

# NOTE: This dynamically typed stub was automatically generated by stubgen.

from typing import Optional, Sequence

class Address:

street: str

housenumber: int

housenumber_postfix: Optional[str]

def __init__(self, street: str, housenumber: int, housenumber_postfix: Optional[str]=...) -> None: ...

class Person:

name: str

adresses: Sequence[Address]

def __init__(self, name: str, adresses: Sequence[str]) -> None: ...

person: Person

IDE也可以识别这些存根文件,如果原始模块不是静态类型的,它们将使用存根文件进行类型提示和代码完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值