在python3中调用函数内部的函数

时间:2016-06-07 10:07:58

标签: python function class python-3.x

我有一个类,我正在尝试在类中的函数内创建一个函数。我的代码是这样的:

class example:
    def __init__(self):
        self.points = 0
    def operations(self):
        def add(self):
            self.points += 1
        def subtract(self):
            self.points -= 1
    def display(self):
        print(self.points)

obj = example()
obj.display()
obj.operations.add()

我得到输出 0 ,然后得到错误:

obj.operations.add()
AttributeError: 'function' object has no attribute 'add'

我已经尝试了许多其他方法来解决这个问题,但没有一个方法可行。 如果您知道如何解决此错误,请回答。

-Thanks

1 个答案:

答案 0 :(得分:-2)

您可以尝试从函数返回函数,然后使用它们 -

class example:
    def __init__(self):
        self.points = 0
    def operations(self):
        def add():
            print "add is called"
            self.points += 1
        def subtract():
            self.points -= 1
        return [add, subtract]
    def display(self):
        print(self.points)

obj = example()
obj.display()
obj.operations()[0]()
obj.display()

如果您特别希望使用obj.operations.add()进行此操作,则可以尝试以这种方式进行聚合(它涉及使用类变量,如果这对您好的话)

class example:
    points = 0
    def __init__(self):
        example.points = 0
        self.operations = Operations(self)

    def display(self):
        print(self.points)

class Operations(example):
    def __init__(self, ex):
        self.points = ex.points

    def add(self):
        print "add is called"
        example.points += 1
    def subtract(self):
        example.points -= 1

obj = example()
obj.display()
obj.operations.add()
obj.display()
obj.operations.subtract()
obj.display()
希望它可能有所帮助!