45

私はJavaのかなりのバックグラウンドを持っており、Pythonを学ぼうとしています。別のファイルにあるときに他のクラスのメソッドにアクセスする方法を理解する上で問題が発生しています。モジュールオブジェクトが呼び出せないというメッセージが表示され続けます。

あるファイルのリストで最大および最小の整数を見つける単純な関数を作成し、別のファイルの別のクラスでそれらの関数にアクセスしたいと考えています。

どんな助けでも大歓迎です、ありがとう。

class findTheRange():

    def findLargest(self, _list):
        candidate = _list[0]
        for i in _list:
            if i > candidate:
                candidate = i
        return candidate

    def findSmallest(self, _list):
        candidate = _list[0]
        for i in _list:
            if i < candidate:
                candidate = i
        return candidate

 import random
 import findTheRange

 class Driver():
      numberOne = random.randint(0, 100)
      numberTwo = random.randint(0,100)
      numberThree = random.randint(0,100)
      numberFour = random.randint(0,100)
      numberFive = random.randint(0,100)
      randomList = [numberOne, numberTwo, numberThree, numberFour, numberFive]
      operator = findTheRange()
      largestInList = findTheRange.findLargest(operator, randomList)
      smallestInList = findTheRange.findSmallest(operator, randomList)
      print(largestInList, 'is the largest number in the list', smallestInList, 'is the                smallest number in the list' )
4

2 に答える 2

81

問題はimportラインにあります。クラスではなくモジュールをインポートしています。ファイルに名前が付けられていると仮定しますother_file.py(Javaとは異なり、「1つのクラス、1つのファイル」などのルールはありません):

from other_file import findTheRange

あなたのファイルがfindTheRangeという名前でもある場合、Javaの慣習に従って、次のように書く必要があります

from findTheRange import findTheRange

と同じようにインポートすることもできますrandom

import findTheRange
operator = findTheRange.findTheRange()

その他のコメント:

a) @Daniel Roseman は正しい。ここではクラスはまったく必要ありません。Pythonは手続き型プログラミングを奨励しています(もちろん、それが適切な場合)

b) リストを直接作成できます。

  randomList = [random.randint(0, 100) for i in range(5)]

c) Java で行うのと同じ方法でメソッドを呼び出すことができます。

largestInList = operator.findLargest(randomList)
smallestInList = operator.findSmallest(randomList)

d) 組み込み関数と巨大な python ライブラリを使用できます。

largestInList = max(randomList)
smallestInList = min(randomList)

e) それでもクラスを使用したいが、必要ない場合はself、次を使用できます@staticmethod

class findTheRange():
    @staticmethod
    def findLargest(_list):
        #stuff...
于 2013-05-27T21:06:19.043 に答える