0

我有一个 Python 脚本,我想在脚本中调用几个函数。下面的示例代码:

class Name():

    def __init__(self):
        self.name = 'John'
        self.address = 'Place'
        self.age = '100'

    def printName(self):
        print self.name

    def printAddress(self):
        print self.address

    def printAge(self):
        print self.age

if __name__ == '__main__': 
    Person = Name()
    Person.printName()
    Person.printAddress()
    Person.printage()

我通过输入执行此代码./name.py。如何从printAddress()脚本末尾的函数执行此代码?

谢谢

4

4 回答 4

3

如果你问如何启动你的 python 脚本并让它在不同的位置开始执行,那么你将不得不启动脚本并提供一些关于你想要它做什么的信息。最常见的方法是添加对命令行参数的支持。

import sys

if __name__ == '__main__':   

    for arg in sys.argv: 
        print arg

如果您要从命令行单独执行上述脚本,它不会做任何事情,但是如果您使用一些额外的参数启动它,例如

./launch.py my_argument another_argument and_so_on

您将看到脚本可以通过 sys.argv 列表访问额外的启动参数。使用它,您可以在启动时检查任何传递的参数,然后在所需位置开始执行脚本。

您的脚本的一个示例可能如下

import sys

class Name:

    def __init__(self):
        self.name = 'John'
        self.address = 'Place'
        self.age = '100'

    def printName(self):
        print self.name

    def printAddress(self):
        print self.address

    def printAge(self):
        print self.age


if __name__ == '__main__': 

    Person = Name()

    launchOptions = sys.argv[1:]

    if not launchOptions or 'name' in launchOptions:
        Person.printName()

    if not launchOptions or 'address' in launchOptions:
        Person.printAddress()

    if not launchOptions or 'age' in launchOptions:
        Person.printAge()

sys.argv[1:] 的范围是因为 sys.argv 中的第一个条目将是启动脚本的路径。

因此,您可以启动此示例并获得以下结果

./launch
John
Place
100

./launch age
100

./launch address
Place

./launch name
John

现在这只是一个非常基本的例子。如果您决定朝这个方向走得更远,阅读pythons getopt 模块可能对您有用。它是命令行选项的解析器。

希望我正确理解了这个问题。

于 2010-05-18T12:24:19.540 回答
1

我不建议你真的这样做,因为它是一个无限的递归函数,但它可以做到:)

class Name():

    def __init__(self):
        self.name = 'John'
        self.address = 'Place'
        self.age = '100'

    def printName(self):
        print self.name

    def printAddress(self):
        print self.address
        main()

    def printAge(self):
        print self.age

def main():
    Person = Name()
    Person.printName()
    Person.printAddress()
    Person.printage()

if __name__ == '__main__': 
    main()
于 2010-05-18T09:36:10.673 回答
0

处理命令行选项的一种更灵活的方法是使用“optparse”模块。查看参考:http ://docs.python.org/library/optparse.html

于 2011-05-04T08:09:46.740 回答
0

线

Person = Name()

表示该类的名称实际上应该是Person. 完全删除printXXX方法并添加一个__repr__方法,例如

def __repr__(self):
    return "%s\n%s\n%s" % (self.name, self.address, self.age)

最后,我建议在接受的参数列表中添加姓名、地址和年龄init

def __init__(self, name, address, age):
    ...

实例化Person对象后,您可以打印它:

person = Person()
print person
于 2010-05-18T09:45:42.413 回答