相关疑难解决方法(0)

使用@property与getter和setter

这是一个纯Python特定的设计问题:

class MyClass(object):
    ...
    def get_my_attr(self):
        ...

    def set_my_attr(self, value):
        ...
Run Code Online (Sandbox Code Playgroud)

class MyClass(object):
    ...        
    @property
    def my_attr(self):
        ...

    @my_attr.setter
    def my_attr(self, value):
        ...
Run Code Online (Sandbox Code Playgroud)

Python让我们可以这样做.如果你要设计一个Python程序,你会使用哪种方法?为什么?

python properties getter-setter

711
推荐指数
13
解决办法
41万
查看次数

自动初始化实例变量?

我有一个python类,看起来像这样:

class Process:
    def __init__(self, PID, PPID, cmd, FDs, reachable, user):
Run Code Online (Sandbox Code Playgroud)

其次是:

        self.PID=PID
        self.PPID=PPID
        self.cmd=cmd
        ...
Run Code Online (Sandbox Code Playgroud)

有没有办法自动初始化这些实例变量,比如C++的初始化列表?它会节省大量冗余代码.

python class initialization-list

75
推荐指数
8
解决办法
3万
查看次数

用于自动绑定__init__参数的Python装饰器

有没有办法自动绑定到方法的self(某些)参数__init__

我的意思是:

class Person:
    @lazy_init
    def __init__(self, name, age, address):
        ...
Run Code Online (Sandbox Code Playgroud)

... 代替:

class Person:
    def __init__(self, name, age, address):
        self.name = name
        self.age = age
        self.address = address
        ...
Run Code Online (Sandbox Code Playgroud)

我想知道在这种情况下人们是否已经使用了类似的东西.或者有什么理由我不应该首先这样做?

python initialization decorator

10
推荐指数
2
解决办法
8531
查看次数

PyCharm - 为所有构造函数参数生成字段

我用构造函数定义了一个类:

class Example:
    def __init__(self, a, b, c):
        ...
Run Code Online (Sandbox Code Playgroud)

现在我想为每个构造函数参数声明一个字段,如下所示:

class Example:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
Run Code Online (Sandbox Code Playgroud)

我想自动执行此操作。PyCharm 的检查允许我为参数生成字段,但一次只能生成一个(作为 的修复Parameter x is not used),这很烦人。对于所有参数,我如何同时执行此操作?

我发现最接近的是python 类 __init__ function 的 PyCharm 模板,解决方案不灵活,因为它只支持固定数量的参数。而且,我觉得这是成熟的IDE必须实现的功能,Idea允许这样做。

那篇文章还参考了在 Python 中进行自动属性分配的最佳方法是什么,这是个好主意吗?,其中讨论了autoassign,这似乎有很多缺点。

我的 PyCharm 版本是 2019.1.3 CE。

python code-generation pycharm

7
推荐指数
1
解决办法
801
查看次数

改进__init__,其中args直接分配给成员

我发现自己用这样的构造函数编写了很多类:

class MyClass(object):
    def __init__(self, foo, bar, foobar=1, anotherfoo=None):
        self.foo = foo
        self.bar = bar
        self.foobar = foobar
        self.anotherfoo = anotherfoo
Run Code Online (Sandbox Code Playgroud)

这是一个糟糕的代码味道吗?Python是否提供了更优雅的处理方式?

我的类甚至一些构造函数不仅仅是我所展示的,但我通常有一个args列表传递给构造函数,最终被分配给类似命名的成员.我做了一些可选的参数来指出这样做的问题:

class MyClass(object):
    def __init__(self, arg_dict):
        self.__dict__ = arg_dict
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
1
解决办法
1619
查看次数

python类__init__函数的PyCharm模板

我有一个包含几个init变量的python类:

class Foo(object):
    def __init__(self, d1, d2):
        self.d1 = d1
        self.d2 = d2
Run Code Online (Sandbox Code Playgroud)

有没有办法在PyCharm中自动创建此代码,因此我不必明确键入:

self.dn = dn
Run Code Online (Sandbox Code Playgroud)

这种模式在我的代码中经常发生.是否有更好的(Pythonic)方法来初始化类?

我已经看过这篇文章(在Python中进行自动属性赋值的最佳方法是什么,这是一个好主意吗?),但我不想使用装饰器,因为它使代码的可读性降低.

python attributes class pycharm

5
推荐指数
2
解决办法
2704
查看次数