使用Class方法添加一个Class变量

时间:2014-03-24 06:56:27

标签: python class variables methods

以下代码将两个Pretty Tables添加到MyTableClass。这些表在类构造函数中启动。我想通过指定addTable名称来创建两个类方法addTableRownewTable,以添加其他表和数据行。我需要做什么语法?我在Class方法中写了一些代码作为占位符。

from prettytable import *

class MyTableClass(object):

    def __init__(self):
        self.table1 =PrettyTable(["Student Name", "Score Test 1"])
        self.table2=PrettyTable(["Student Name", "Score Test 2"])

    def addTable (self, newTable, **kwargs):
        #What is the syntax to make NewTable a Class variable of MyTableClass?
        self.newTable = PrettyTable(kwargs.values())

    def addTableRow(self, newTable, **kwargs):
        #What is the syntax to use newTable to add data to added table?
        self.newTable.add_row(kwargs.values())


def main():
    m = MyTableClass()
    m.table1.add_row(["Kenny", 86])
    m.table1.add_row(["Jackson", 72])
    m.table1.add_row(["Charlie", 100])
    m.table2.add_row(["Kenny", 95])
    m.table2.add_row(['Jackson', 85])
    m.table2.add_row(["Charlie", 99])


print (m.table1)
print (m.table2)

if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:1)

您可以使用setattr功能设置属性:

def addTable (self, newTable, **kwargs):
    setattr(self, newTable, PrettyTable(kwargs.values()))

您可以使用getattr从名称中获取属性:

def addTableRow(self, newTable, **kwargs):
    getattr(self, newTable).add_row(kwargs.values())

然而,简单地使用表格的字典会更简单:

class MyTableClass(object):

    def __init__(self):
        self.tables = {
            'table1': PrettyTable(["Student Name", "Score Test 1"]),
            'table2': PrettyTable(["Student Name", "Score Test 2"]),
        }

    def addTable (self, newTable, **kwargs):
        self.tables[newTable] = PrettyTable(kwargs.values())

    def addTableRow(self, newTable, **kwargs):
        self.tables[newTable].add_row(kwargs.values())

如果您希望能够通过属性访问指定的表格,例如示例中的self.table1,只需将__getattr__定义为:

def __getattr__(self, name):
    return self.tables[name]