Mar*_*ari 17 python boilerplate
厌倦了为我的类手动实现字符串表示,我想知道是否有一种pythonic方法可以自动执行.
我希望有一个输出,涵盖类的所有属性和类名.这是一个例子:
class Foo(object):
attribute_1 = None
attribute_2 = None
def __init__(self, value_1, value_2):
self.attribute_1 = value_1
self.attribute_2 = value_2
Run Code Online (Sandbox Code Playgroud)
导致:
bar = Foo("baz", "ping")
print(str(bar)) # desired: Foo(attribute_1=baz, attribute_2=ping)
Run Code Online (Sandbox Code Playgroud)
在一些Java项目中使用Project Lombok @ToString后,我想到了这个问题.
fal*_*tru 30
def auto_str(cls):
def __str__(self):
return '%s(%s)' % (
type(self).__name__,
', '.join('%s=%s' % item for item in vars(self).items())
)
cls.__str__ = __str__
return cls
@auto_str
class Foo(object):
def __init__(self, value_1, value_2):
self.attribute_1 = value_1
self.attribute_2 = value_2
Run Code Online (Sandbox Code Playgroud)
应用:
>>> str(Foo('bar', 'ping'))
'Foo(attribute_2=ping, attribute_1=bar)'
Run Code Online (Sandbox Code Playgroud)
您可以使用@dataclass,它会自动生成__init__()、__repr__()、__str__()等。您只需要向@dataclass类添加装饰器并向成员添加类型注释即可。您甚至可以删除您的__init__()实现。
from dataclasses import dataclass
@dataclass
class Foo(object):
attribute_1 : str
attribute_2 : str
bar = Foo("baz", "ping")
print(str(bar)) # Prints: Foo(attribute_1='baz', attribute_2='ping')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3259 次 |
| 最近记录: |