所以我有一个类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
模型,我还有Contractor
,Student
等等。我想将此变量抽象出来。
所以我试图做的是定义超类:
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()
方法?