首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pycharm (@property)和(@x.setter)自动生成

Pycharm (@property)和(@x.setter)自动生成
EN

Stack Overflow用户
提问于 2015-01-28 10:23:33
回答 3查看 19.9K关注 0票数 25

我想知道是否有某种方法可以使用Pycharm为类中的所有变量自动生成getter(@property)或setter。

如果有办法,有人能指指点点吗?

谢谢!实际上,我的意思是自动生成(@property)和(@x.setter)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-28 11:07:03

没有办法做到这一点。您可以提取代码的某些部分,但不能让py魅力为您生成getter和setter。也没有必要,因为所有变量都是公共的,_var值也可以更改,即使它们被视为私有变量。

编辑(所涉更改):

如果您想在生成getter和setter时编写更少的代码,那么只需使用props或PyCharm中的propsd片段即可。

票数 24
EN

Stack Overflow用户

发布于 2019-12-12 19:58:23

仅仅因为Python不强制私有成员,并不意味着您必须没有它们。但是请注意,getter和setter是函数调用,比直接成员访问慢得多。

PyCharm没有提供一个菜单来为所有私有成员创建属性,但是它有一个活动模板:在类中(缩进必须是正确的),输入支柱并按enter键。将出现只读属性的存根。

我采用了我的活动模板来轻松地生成类似于getter的属性:打开设置(Ctrl+Alt+S)、->编辑器、-> live模板、->、Python、->道具

代码语言:javascript
运行
复制
@property
def $NAME$(self):
    return self.__$NAME$

用于读写访问的活动模板props也是如此:

代码语言:javascript
运行
复制
@property
def $NAME$(self) -> $TYPE$:
    return self.__$NAME$

@$NAME$.setter
def $NAME$(self, $NAME$: $TYPE$):
    self.__$NAME$ = $NAME$
票数 7
EN

Stack Overflow用户

发布于 2015-01-28 11:20:14

没有必要这样做。getters和setter的要点是

  • 限制访问(如使某物只读)
  • 维护API (以便您可以更改基础字段或添加一些处理)。

第一个不能用Python实现,第二个不需要在任何地方使用getter和setter。

如果你有

代码语言:javascript
运行
复制
class Person(object):

    def ___init__(self, full_name):
        self.full_name = full_name

并决定让namesurname代替,然后您可以添加

代码语言:javascript
运行
复制
    @property
    def full_name(self):
        return self.name + " " + self.surname

    @full_name.setter
    def full_name(self, value):
        self.name, self.surname = value.split()

而不破坏API。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28189763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档