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.pyprintAddress()スクリプトの最後にある関数からこのコードを実行するにはどうすればよいですか?

ありがとう

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リストを介して追加の起動引数にアクセスできることがわかります。これを使用すると、起動時に渡された引数を確認してから、目的の場所でスクリプトの実行を開始できます。

スクリプトの1つの例は、次のようになります。

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

これは非常に基本的な例です。この方向にさらに進むことにした場合は、pythonsgetoptモジュールを読むと役立つ場合があります。これは、コマンドラインオプションのパーサーです。

うまくいけば、私は質問を正しく理解しました。

于 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

この線

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 に答える
0

コマンドラインオプションを処理するより柔軟な方法は、「optparse」モジュールを使用することです。リファレンスをチェックしてください:http://docs.python.org/library/optparse.html

于 2011-05-04T08:09:46.740 に答える