为了论证,如果我有:
Class foo:
def bar(self, arg1, arg2):
return arg1 + arg2
def bah(self, arg)
aString = self.bar("s1", "s2")
return aString + arg3
我可以在我的代码中使用所有内容但是如果我想在python命令行上单独测试这些不在我的脚本内部我将如何使用SELF进行此操作,没有自我运行正常但我不知道如何提供自我"用python命令行工具测试时(在命令行输入python)?
如果我尝试在python命令行工具中测试,我得到:
>>>>from FILENAME import foo
>>>>print(foo.bah("ASTRING"))
missing 1 required positional argument
>>>>self.print(foo.bah("ASTRING"))
NameError: name 'self' is not defined
答案 0 :(得分:1)
您需要通过类的实例调用该方法,arg3
中的bah
未定义:
Class foo:
def bar(self, arg1, arg2):
return arg1 + arg2
def bah(self, arg)
arg3 = "SOMEVALL"
aString = self.bar("s1", "s2")
return aString + arg3
然后,在shell中:
from FILENAME import foo
print(foo().bah("SOMETHING"))
答案 1 :(得分:1)
您必须创建一个对象,class foo
的实例,并在其上调用bah()
:
f = foo()
f.bah(some_arg)
您还需要更正类的语法,并定义some_arg
class foo:
def bar(self, arg1, arg2):
return arg1 + arg2
def bah(self, arg):
aString = self.bar("s1", "s2")
return aString + arg
some_arg = '123'
f = foo()
f.bah(some_arg)
's1s2123'
答案 2 :(得分:1)
你可以通过使用classmethod装饰器创建你的函数,通过继承基类对象然后使所有函数类有界。你的测试代码没有任何改变。 另一种看世界的方式
In [121]: class foo(object):
...: @classmethod
...: def bar(self, arg1, arg2):
...: return arg1 + arg2
...: @classmethod
...: def bah(self, arg):
...: arg3 = "SOMEVALL"
...: aString = self.bar("s1", "s2")
...: return aString + arg3
...:
In [122]: print (foo.bah("have you learnt something new scott"))
s1s2SOMEVALL