如何从多个函数开始一个Python脚本

0 投票
4 回答
1308 浏览
提问于 2025-04-15 22:50

我有一个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 个回答

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
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()
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

这只是一个非常基础的例子。如果你决定在这个方向上深入研究,了解一下 Python 的 getopt 模块 可能会对你有帮助。它是一个用于解析命令行选项的工具。

希望我理解了你的问题。

撰写回答