类中的方法,在命令行解释器Python上使用同一类中的方法

时间:2017-11-22 03:30:04

标签: python self

为了论证,如果我有:

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

3 个答案:

答案 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