假设我有一个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__可能会实现此目标。
但是,是否有一个函数可以应用于没有类级特定函数的通用类?
答案 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,列表或字典)。