从已知对象生成python代码

从已知对象生成python代码,python,Python,假设我有一个Python类 我还有一个来自这个类的实例。 我可以得到对象创建线吗 i、 e 现在我有了乐趣的例子,也就是乐趣。 我如何构造一个函数来返回“这个对象的python创建行”,即“Fun(x,y,z=z)” 理解实现特定于类的str可以实现这个目标 但是,是否有一个函数可以应用于一般类而不需要类级别的特定函数 您似乎想要的函数是repr() 您可以尝试使用vars(),这与\uuu dict\uuuu查找对象的属性和值相同。这样,您可以创建一个泛型repr()方法,并让其他类继承它:

假设我有一个Python类

我还有一个来自这个类的实例。 我可以得到对象创建线吗

i、 e

现在我有了乐趣的例子,也就是乐趣。 我如何构造一个函数来返回“这个对象的python创建行”,即“Fun(x,y,z=z)”

理解实现特定于类的str可以实现这个目标


但是,是否有一个函数可以应用于一般类而不需要类级别的特定函数

您似乎想要的函数是
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')