【问题标题】:Define Function in Class在类中定义函数
【发布时间】:2020-01-08 01:07:37
【问题描述】:

这可能有一个明显的答案,但我试图在 python 的类中定义一个函数,以便我可以调用该函数,就像使用命名空间从类中调用任何变量一样。有没有办法做到这一点?

class Table():

    def __init__(self):

        self.table = [
        #    1  2  3  4  5  6  7  8  9
            [0, 5, 0, 2, 0, 0, 0, 0, 3], #1
            [0, 4, 6, 0, 8, 0, 0, 0, 1], #2
            [2, 0, 3, 0, 7, 0, 9, 0, 0], #3
            [0, 0, 0, 9, 0, 0, 0, 0, 0], #4
            [0, 0, 0, 8, 3, 7, 0, 0, 0], #5
            [0, 0, 0, 0, 0, 6, 0, 0, 0], #6
            [0, 0, 9, 0, 6, 0, 8, 0, 4], #7
            [4, 0, 0, 0, 5, 0, 3, 7, 0], #8
            [5, 0, 0, 0, 0, 3, 0, 6, 0], #9
        ]

        def get(self, x=1, y=1):
            return self.table[y-1][x-1]

        def print_t():
            None

我希望能够通过使用“Table().get”和“Table().print_T”来调用“get”和“print_T”函数。

【问题讨论】:

  • 试试Table().get()
  • get 必须访问 self.table,因为 table 既不是函数本地名称也不是全局名称。
  • 缩进还是坏了。您是否打算__init__ 中定义getprint_t,而不是Table

标签: python function class


【解决方案1】:

Table().get() 将调用您的 get 函数,因为您需要先初始化 Table()。您需要将 (self) 添加到 print_t 才能使该函数与同一个调用一起使用!

Table.get()
>>>TypeError: get() missing 1 required positional argument: 'self'
Table().get()
0

Table.print_t()
#None
Table().print_t()
>>>TypeError: print_t() takes 0 positional arguments but 1 was given

【讨论】:

    【解决方案2】:
    class Table():
    
    def __init__(self):
    
        self.table = [
        #    1  2  3  4  5  6  7  8  9
            [0, 5, 0, 2, 0, 0, 0, 0, 3], #1
            [0, 4, 6, 0, 8, 0, 0, 0, 1], #2
            [2, 0, 3, 0, 7, 0, 9, 0, 0], #3
            [0, 0, 0, 9, 0, 0, 0, 0, 0], #4
            [0, 0, 0, 8, 3, 7, 0, 0, 0], #5
            [0, 0, 0, 0, 0, 6, 0, 0, 0], #6
            [0, 0, 9, 0, 6, 0, 8, 0, 4], #7
            [4, 0, 0, 0, 5, 0, 3, 7, 0], #8
            [5, 0, 0, 0, 0, 3, 0, 6, 0], #9
        ]
    
        def get(self, x=1, y=1):
            return self.table[y-1][x-1]
    
        def print_t(self):
            None
    if __name__ == '__main__':
        Table().get()
        Table().print_t()
    

    这样就可以了。

    【讨论】:

    • Table.get() 引发 TypeError 因为它期望一个变量作为 self 传递。这是由于 Table 没有被初始化,所以 self 没有被设置。这行不通。
    猜你喜欢
    • 2011-06-20
    • 2014-04-04
    • 2013-11-25
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    相关资源
    最近更新 更多