ATTR是减少样板文件的有用包。例子:
class SomeClass(object):
a_number = attr.ib(default=42)
list2_of_numbers = attr.ib(default=attr.Factory(list))
PyCharm不为生成的\uuuuuu init\uuuuuu
方法提供代码完成功能,是否有插件可以做到这一点?或者其他什么工作?
最近(18年初)在这方面有一些有趣的发展:
__init__
和cmp
特殊方法的支持)attrs
预计其中一些问题将在未来几个月内得到解决。希望他们都是!
好消息: PyCharm 2018.2增加了对attrs的支持。
2018年8月更新-根据Hynek的回答,ATTR支持在PyCharm 2018.2中。我迟到了一个月,因为我最近没有在Python中工作太多。。。
我的原始答案如下,尽管它仅适用于您的PyCharm 2018.1或更低版本。。。
我知道的唯一解决方法(从PyCharm 2017.2.4开始)是在类声明中定义冗余的\uuuu init\uuuu
。PyCharm的代码完成选择了这个方法ok,但是在运行时生成的attrs\uuuu init\uuuu
将覆盖它。例如(带有类型提示):
import attr
from typing import List, Optional
@attr.s
class SomeClass:
def __init__(self, a_number: int = 42,
list2_of_numbers : Optional[List[int]] = None) -> None:
...
a_number: int = attr.ib(default=42)
list2_of_numbers: List[int] = attr.ib(default=attr.Factory(list))
PyCharm代码完成屏幕截图
我还尝试使用存根文件从类声明中删除伪\uuuuu init\uuuu
,以期删除。pyi,如果它曾经被支持过,但它不起作用。
当然,这种做法首先违背了使用attrs的目的(即减少类声明样板,帮助可运维性等)。
如果您添加、删除或修改属性。ib(),您需要记住手动更新\uuuu init\uuu
签名,这与attrs的理念相反。
仅供参考,乔纳斯·奥布里斯特在今年早些时候发布了一条关于attrs支持2017.3版本的推文,所以祈祷吧...
编辑
事实上,还有一个稍微更可口的解决方案。只需将init=False
传递到attr. s
并像通常一样定义您的__init__
方法。你仍然没有充分利用attrs的魔力,但是嘿...总比没有好。
注意在手册__init__
中初始化默认值,而不是针对类的attr.ib声明。根据文档,attr.ib的默认值只会在attrs生成的__init__
中初始化。
除此之外,你还可以得到你的其他dunder方法,验证,以及所有其他的好处,据我所知。
import attr
from typing import List, Optional
@attr.s(init=False)
class SomeClass:
a_number: int = attr.ib()
list2_of_numbers: List[int] = attr.ib()
def __init__(self, a_number: int = 42,
list2_of_numbers : Optional[List[int]] = None) -> None:
self.a_number: int = a_number
self.list2_of_numbers: List[int] = list2_of_numbers or []
# Replicate behaviour of attrs-generated __init__
attr.validate(self)
我已经安装了Pycharm并使用Anaconda 3作为我的解释器。我无法导入Matplotlib(或Seaborn)。当我运行“import matplotlib.pyplot as plt”时,我得到以下结果:- 后端Qt5Agg是交互式后端。打开交互模式。 回溯(最近一次呼叫): 文件 “C:\Program Files (x86)\JetBrains\PyCharm Community E
在Pycharm中,似乎只需单击一下即可安装软件包。这是非常容易与颠簸。现在,当我试图安装tensorflow时发生错误。如屏幕截图所示,Tensorflow是通过Mac上的终端使用该命令安装的 sudo pip安装--升级https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl(参考https:
我已经安装了<code>pycharm</code>,但是当我想打开它时,会出现这个错误。 但我已经安装了java。 的输出是。 0_74//bin:/usr/本地/sbin:/usr/sbin:/usr/sbin:/usr/bin:/usr/bin:/sbin:/sbin:/sbin:/sbin:/usr/bin:/sbin:/bin:/usr/游戏:/usr/本地/游戏。 我能做什么?
我是pycharm的新用户,我很难运行一个简单的文件来导入熊猫。我有以下问题: 每当我打开项目时,“扫描文件到索引”都需要很长时间。 我可以看到在索引中,它使用了Anaconda2中的包/文件,这就是为什么我的程序需要很长时间才能运行。 我已经尝试使某些文件夹“排除”,如此处所述 PyCharm 4.0.5 挂在“扫描文件以索引”后台任务上,我还删除了此处所述的“缓存”文件夹 Intelli J
使用pip3(v.10.0.1)通过终端安装pygame。检查版本,输出:需求已满足:pygame in。/Library/Python/3.7/lib/Python/site-packages(1.9.6) 然而,在导入pygamModuleNotFoundError中,Py魅力没有找到模块并返回:文件"/用户/Dildora/PycharmProject/GameOfLife_/venv/fi
在PyCharm中,我在