我基本上想要从任何类之外的函数调用位于类中的函数,如下面的示例代码:
class something(Gridlayout):
def func1(self, number1, number2)
Solution = number1 + number2
def call_func1()
Something.func1(3, 5)
当然这只是一个例子,这不是我想要做的,但重点是我尝试了上面的代码并且它给出了以下错误:
TypeError:必须使用某些东西调用未绑定的方法func1() instance作为第一个参数(改为使用int实例)
我做错了什么?
答案 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)。希望这会帮助你。