从已知对象生成python代码

时间:2016-03-30 04:07:03

标签: python

假设我有一个Python类。

我也有这个班级的实例。 我有可能获得对象创建线吗?

class Fun:
  def __init__(self,x,y,**kwargs):
    self.x = x
    self.y = y
    for k,v in kwargs.iteritems():
      setattr(self, k, v)

fun = Fun(x, y, z=z)

现在我有趣的例子,即有趣。 我怎样才能构造一个函数来返回"这个对象的python创建行",即" Fun(x,y,z = z)"

了解实现特定类__str__可能会实现此目标。

但是,是否有一个函数可以应用于没有类级特定函数的通用类?

1 个答案:

答案 0 :(得分:0)

您似乎想要的功能是repr()

可能尝试使用vars(),它与.__dict__相同,以查找对象的属性和值。这样,您可以创建一个通用的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,列表或字典)。