これが私のexample.py
ファイルです。
from myimport import *
def main():
myimport2 = myimport(10)
myimport2.myExample()
if __name__ == "__main__":
main()
そしてここにmyimport.py
ファイルがあります:
class myClass:
def __init__(self, number):
self.number = number
def myExample(self):
result = myExample2(self.number) - self.number
print(result)
def myExample2(num):
return num*num
example.py
ファイルを実行すると、次のエラーが発生します。
NameError: global name 'myExample2' is not defined
どうすれば修正できますか?
これがコードの簡単な修正です。
from myimport import myClass #import the class you needed
def main():
myClassInstance = myClass(10) #Create an instance of that class
myClassInstance.myExample()
if __name__ == "__main__":
main()
そしてその myimport.py
:
class myClass:
def __init__(self, number):
self.number = number
def myExample(self):
result = self.myExample2(self.number) - self.number
print(result)
def myExample2(self, num): #the instance object is always needed
#as the first argument in a class method
return num*num
コードに2つのエラーが表示されます。
myExample2
_をself.myExample2(...)
として呼び出す必要がありますself
を追加する必要があります:def myExample2(self, num): ...
まず、alKidの回答に同意します。これは回答よりも質問に対するコメントのほうが多いですが、コメントする評判はありません。
私のコメント:
エラーの原因となるグローバル名はmyImport
であり、myExample2
ではありません
説明:
My Python 2.7によって生成される完全なエラーメッセージは次のとおりです。
Message File Name Line Position
Traceback
<module> C:\xxx\example.py 7
main C:\xxx\example.py 3
NameError: global name 'myimport' is not defined
この質問は、自分のコードで不明な「グローバル名が定義されていません」エラーを追跡しようとしたときに見つかりました。質問のエラーメッセージが正しくないため、混乱してしまいました。実際にコードを実行して実際のエラーを確認したところ、すべてが理にかなっています。
これにより、このスレッドを見つけた人が私と同じ問題を起こすのを防ぐことができます。私よりも評判の高い人がコメントにしたり、質問を修正したりする場合は、遠慮なくお問い合わせください。
モジュール全体のインスタンスではなく、myClass
クラスのインスタンスを作成する必要があります(そして、変数名を編集して、それほどひどくないようにします)。
from myimport import *
def main():
#myobj = myimport.myClass(10)
# the next string is similar to above, you can do both ways
myobj = myClass(10)
myobj.myExample()
if __name__ == "__main__":
main()
他の答えは正しいですが、myExample2()
がメソッドである必要が本当にあるのでしょうか。スタンドアロンで実装することもできます。
def myExample2(num):
return num*num
class myClass:
def __init__(self, number):
self.number = number
def myExample(self):
result = myExample2(self.number) - self.number
print(result)
または、名前空間をクリーンに保ちたい場合は、メソッドとして実装しますが、self
は必要ないため、@staticmethod
:
def myExample2(num):
return num*num
class myClass:
def __init__(self, number):
self.number = number
def myExample(self):
result = self.myExample2(self.number) - self.number
print(result)
@staticmethod
def myExample2(num):
return num*num