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

时间:2015-01-28 10:23:33

标签: python pycharm

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

如果有办法,有人可以指出吗?


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

4 个答案:

答案 0 :(得分:16)

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

编辑(有问题的变更):

如果您想在制作getter和setter时编写更少的代码,那么只需使用PyCharm中的propspropsd代码段。

答案 1 :(得分:3)

没有必要。 getter和setter的重点是

  • 限制访问权限(例如将其设为只读)
  • 维护API(以便您可以更改基础字段或添加一些处理)。

第一个在Python中无法实现,第二个可以在任何地方都不使用getter和setter。

如果你有

class Person(object):

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

并决定改为namesurname,然后您可以添加

    @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。

答案 2 :(得分:0)

仅仅因为Paython不强制执行私人成员,并不意味着您就必须没有它。

PyCharm没有提供用于为所有私人成员创建属性的菜单,但它具有活动模板:

在您的课堂上(缩进必须正确),键入prop并按Enter。将会显示您只读属性的存根。

我采用了实时模板来轻松生成类似getter的属性: 打开设置(Ctrl + Alt + S)->编辑器->实时模板-> Python-> prop

@property
def $NAME$(self):
    return self.__$NAME$

实时模板props的读写访问权限相同:

@property
def $NAME$(self) -> $TYPE$:
    return self.__$NAME$

@$NAME$.setter
def $NAME$(self, $NAME$: $TYPE$):
    self.__$NAME$ = $NAME$

答案 3 :(得分:0)

很棒,我做了如下的模板。按照@先生。明确的建议。

@property
def $NAME$(self):
    return self.__$NAME$

@$NAME$.setter
def $NAME$(self, value):
    self.__$NAME$ = value

超级帮助