如何访问其基类中的类字段值?

时间:2014-07-20 03:54:56

标签: python inheritance

我想从其基类​​访问类字段中的值。怎么做?看看我的代码:

class MyBase(object):

    def p(self):
        members = [attr for attr in dir(self) if not callable(getattr(self, attr)) and not attr.startswith("__")]
        print members

class UserTest(MyBase):
    def __init__(self, name='', family='', age=''):
        self.name = name
        self.family = family
        self.age = age

a = UserTest(name='ehsan', family='shirzadi', age=29)
a.p()

使用上面的代码,我可以在执行a.p()后看到变量名,但是如何查看它们的值?请注意我不知道字段的名称,所以我不能在基类中使用self.name

2 个答案:

答案 0 :(得分:2)

callable(getattr(self, attr))中执行MyBase.p时,您已获得一次该值。您可以使用相同的方法获取输出值:

class MyBase(object):
    def p(self):
        print [(attr, getattr(self, attr)) for attr in dir(self)
            if not callable(getattr(self, attr)) and not attr.startswith('__')]

或者您可以使用vars代替dir

class MyBase(object):
    def p(self):
        print [(attr, value) for attr, value in vars(self).items()
            if not callable(value) and not attr.startswith('__')]

两者都产生如下结果:

[('age', 29), ('name', 'ehsan'), ('family', 'shirzadi')]

事实上,vars会为您提供一个词典,其中包含一些不需要的成员已被忽略:

class MyBase(object):
    def p(self):
        print vars(self)

或只是:

a = UserTest(name='ehsan', family='shirzadi', age=29)
print vars(a)

的产率:

{'age': 29, 'name': 'ehsan', 'family': 'shirzadi'}

答案 1 :(得分:1)

这应该有效:

class MyBase(object):
    def p(self):
        print vars(self)