python中的非实例化类的继承范围

时间:2018-06-05 22:24:23

标签: python-3.x inheritance scope

所以我有一个类Employee,它充当数据库表的模型。

class Employee():
  __tablename__ = 'employee'
  id = Column(String(12), primary_key=True)
  last_name = Column(String(40))
  first_name = Column(String(20))
  middle_name = Column(String(25))
  pref_name = Column(String(20))
  primary_email = Column(String(60))
  username = Column(String(30))

我想要一种方法来快速获取"列的名称"作为类中的变量而不必实例化类。

我发现我可以在类中添加这个变量:

columns = [attr for attr in dir() if not attr.startswith(("__", "_"))]

它会完美地运作。

>>> Employee.columns
['first_name', 'id', 'last_name', 'middle_name', 'pref_name', 'primary_email', 'username']

但由于我拥有的不仅仅是Employee模型,我还有ContractorStudent等等。我想将此变量抽象出来。

所以我试图做的是定义超类:

class Test():
  columns = [attr for attr in dir() if not attr.startswith(("__", "_"))]

然后从超级class Employee(Test): ...

继承

但是当我这样做时,我得到了结果:

>>> Employee.columns
[]

所以我认为这与继承范围有关。

我还尝试将列作为方法放置,而不是变量:

class Test():
  def columns():
    return [attr for attr in dir() if not attr.startswith(("__", "_"))]

得到[]

的相同结果

所以我的问题是,是否可以将类变量抽象为超类,以便从调用它的类的范围而不是超类的范围运行dir()方法?

0 个答案:

没有答案