从非类函数中调用类中的函数

时间:2017-10-22 20:52:14

标签: python

我基本上想要从任何类之外的函数调用位于类中的函数,如下面的示例代码:

class something(Gridlayout):
    def func1(self, number1, number2)
        Solution = number1 + number2

def call_func1()
       Something.func1(3, 5)

当然这只是一个例子,这不是我想要做的,但重点是我尝试了上面的代码并且它给出了以下错误:

  

TypeError:必须使用某些东西调用未绑定的方法func1()   instance作为第一个参数(改为使用int实例)

我做错了什么?

3 个答案:

答案 0 :(得分:2)

由于func1是一个实例级函数,您需要首先创建类something的对象,然后使用它:

my_object = something()
my_object.func1(3, 5)

但是,正如我发现您在函数中的任何位置都没有使用self,您可能希望使用@staticmethod装饰器将其定义为静态方法:

@staticmethod
def func1(number1, number2):
    print('Numbers: {}, {}'.format(number1, number2)

然后以类似的方式调用它:

my_object = something()
my_object.func1(3, 5)

或者,如果您希望在不创建类对象的情况下访问它,那么您可以使用@classmethod装饰器将其定义为类函数:

@classmethod
def func1(cls, number1, number2):
    #      ^ Reference of class will be passed here, instead of object of class
    print('Numbers: {}, {}'.format(number1, number2)

然后您可以使用以下类直接调用它:

something.func1(3,5)    

答案 1 :(得分:1)

您正在寻找的是一种没有引用self的方法。也就是说,只是一个正常的功能,恰好生活在课堂上。这称为静态方法,可以通过staticmethod装饰器构建:

class Something(Gridlayout):
    @staticmethod
    def func1(number1, number2):
        Solution = number1 + number2
        return Solution

def call_func1():
   Solution = Something.func1(3, 5)
   print(Solution)

call_func1()

答案 2 :(得分:1)

我认为你没有将课程导入你的课程。如果你从同一个python文件中调用call_func1(),它就是O.K.但是如果你在python文件中声明了这个类,就调用了something.py并且你有一个test.py python文件来自你调用call_func1()的地方,那么你需要在该文件(test.py)中添加以下行文件的顶部。

in something.py

class something(Gridlayout):
    def func1(self, number1, number2)
        Solution = number1 + number2
        return Solution

在test.py中

from something import Something

def call_func1()
   Something something
   val=something.func1(3, 5)
   print(val)

如果您将func1声明为静态,则可以使用Something.func1无需实例化它。

同样在你的程序中我注意到一个语法错误。你宣称你的班级是某些东西(小s),你把它称为Something(S capital)。希望这会帮助你。