获取实例变量名称列表

时间:2016-01-31 21:59:49

标签: python python-2.7

我想得到一个类的所有实例变量的列表,而不用创建该类的实例。我觉得这在Python中是不可能的。

假设我有这门课程:

class Person(object):
    def __init__(self, fullname, age):
        self.firstname, self.lastname = fullname.split(' ')
        self.age = age

我想从中得到的是列表['lastname', 'age', 'firstname']

我能够获得此功能的唯一方法是使用Person的临时实例:

temp = Person('Bob Jones', 27)
print vars(temp)  # {'lastname': 'Jones', 'age': 27, 'firstname': 'Bob'}
print vars(temp).keys()  # ['lastname', 'age', 'firstname']

这里的问题是,因为fullname.split()被调用,如果我尝试使用Person(None, None)创建一个空实例,则会引发错误。我不允许更改__init__以允许此操作。

我的第一个想法是使用vars(Person).keys(),但这会提供Person类型的所有属性,而不是Person的实例所具有的属性:

print vars(Person).keys()
# ['__module__', '__dict__', '__weakref__', '__doc__', '__init__']

有没有一种方法可以在不使用temp的情况下修改类?

2 个答案:

答案 0 :(得分:0)

Python在执行__init__方法之前不知道将定义哪些属性。为了执行该方法,您必须创建该类的实例。哦,好吧:(

答案 1 :(得分:0)

这取决于你想知道多严重。例如,您可以fork / exec一个新的程序实例,实例化该类,分析实例,并返回结果。

您可以创建一个对象,该对象使用某些__magic_methods__()来检测其方法的调用(如.split()),然后尝试猜测适当的输入类型。 ..

但你可以打电话来知道实例数据的起始列表是什么吗?否。