私は、Pythonを学ぼうとしているJavaのかなりのバックグラウンドを持っています。別のファイルにある他のクラスのメソッドにアクセスする方法を理解する際に問題が発生しています。モジュールオブジェクトが呼び出し可能でないことを取得し続けます。
1つのファイルのリストで最大および最小の整数を見つけるために、別のファイルの別のクラスのそれらの関数にアクセスする簡単な関数を作成しました。
どんな助けも感謝します、ありがとう。
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' )
問題は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)@ダニエル・ローズマンは正しい。ここではクラスはまったく必要ありません。 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...
from
a directory_of_modules
、次のことができますimport
a specific_module.py
specific_module.py
には、some_methods()
またはfunctions()
と一緒にClass
を含めることができますspecific_module.py
から、Class
をインスタンス化するか、functions()
を呼び出すことができますClass
から、some_method()
を実行できます例:
#!/usr/bin/python3
from directory_of_modules import specific_module
instance = specific_module.DbConnect("username","password")
instance.login()
PEP 8-Pythonコードのスタイルガイド からの抜粋:
モジュールには、すべて小文字の短い名前を付ける必要があります。
注意:読みやすさを改善する場合は、モジュール名にアンダースコアを使用できます。
Pythonモジュールは、ソースファイル(* .py)であり、次のものを公開できます。
クラス:「CapWords」規則を使用した名前。
機能:小文字の名前、アンダースコアで区切られた単語。
グローバル変数:規則は、関数の規則とほぼ同じです。