从已知对象生成python代码
假设我有一个Python类 我还有一个来自这个类的实例。 我可以得到对象创建线吗 i、 e 现在我有了乐趣的例子,也就是乐趣。 我如何构造一个函数来返回“这个对象的python创建行”,即“Fun(x,y,z=z)” 理解实现特定于类的str可以实现这个目标从已知对象生成python代码,python,Python,假设我有一个Python类 我还有一个来自这个类的实例。 我可以得到对象创建线吗 i、 e 现在我有了乐趣的例子,也就是乐趣。 我如何构造一个函数来返回“这个对象的python创建行”,即“Fun(x,y,z=z)” 理解实现特定于类的str可以实现这个目标 但是,是否有一个函数可以应用于一般类而不需要类级别的特定函数 您似乎想要的函数是repr() 您可以尝试使用vars(),这与\uuu dict\uuuu查找对象的属性和值相同。这样,您可以创建一个泛型repr()方法,并让其他类继承它:
但是,是否有一个函数可以应用于一般类而不需要类级别的特定函数 您似乎想要的函数是
repr()
您可以尝试使用vars()
,这与\uuu dict\uuuu
查找对象的属性和值相同。这样,您可以创建一个泛型repr()
方法,并让其他类继承它:
class ReprMixin(object):
def __repr__(self):
return '{klass}({params})'.format(
klass=self.__class__.__name__,
params=', '.join(['{}={!r}'.format(k, v) for k, v in vars(self).items()]),
)
class Fun(ReprMixin):
def __init__(self, x, y, **kwargs):
self.x = x
self.y = y
for k, v in kwargs.iteritems():
setattr(self, k, v)
fun = Fun(10, 20, z='abc')
print(repr(fun))
>>> Fun(y=20, x=10, z='abc')
请注意,订单不受保证。另外,{!r}
意味着:对正在格式化的对象调用repr()
但是,这会带来一些挫折,因为您可能不知道类可能具有什么类型的属性,并且尝试
eval()
这在非内置类型(例如int、str、list或dict)中可能不起作用;y='b';z='c';fun=fun(x,y,z=z),预期的输出应该是“fun('a','b',z='c')”。您可能希望使用fun上的inspect
模块开始。
class ReprMixin(object):
def __repr__(self):
return '{klass}({params})'.format(
klass=self.__class__.__name__,
params=', '.join(['{}={!r}'.format(k, v) for k, v in vars(self).items()]),
)
class Fun(ReprMixin):
def __init__(self, x, y, **kwargs):
self.x = x
self.y = y
for k, v in kwargs.iteritems():
setattr(self, k, v)
fun = Fun(10, 20, z='abc')
print(repr(fun))
>>> Fun(y=20, x=10, z='abc')