这是一个纯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类,看起来像这样:
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++的初始化列表?它会节省大量冗余代码.
有没有办法自动绑定到方法的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)
我想知道在这种情况下人们是否已经使用了类似的东西.或者有什么理由我不应该首先这样做?
我用构造函数定义了一个类:
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。
我发现自己用这样的构造函数编写了很多类:
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) 我有一个包含几个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中进行自动属性赋值的最佳方法是什么,这是一个好主意吗?),但我不想使用装饰器,因为它使代码的可读性降低.