6

ここ数日で Python の学習を開始しましたが、オブジェクト指向プログラミングを調査しているときに問題に直面しています。pydev プラグインの実行中に Eclipse を使用しており、python 3.3 ベータ版で実行しており、Windows 64 ビット システムを使用しています。

スーパークラス (別のソース ファイルでコーディングした各クラス) を拡張しようとしない限り、クラスを正常に初期化し、その中の任意のメソッドを使用できます。たとえば、次のコードは正常にコンパイルおよび実行されます。

class pythonSuper:
    string1 = "hello"
    def printS():
        print pythonSuper.string1

それにアクセスして実行するコード...

from stackoverflow.questions import pythonSuper
class pythonSub:
    pysuper = pythonSuper.pythonSuper()
    pysuper.printS()

私が言ったように、それはうまくいきます。次のコードはそうではありません

class pythonSuper: """Same superclass as above. unmodified, except for the spacing"""
string1 = "hello"
def printS(self):
    print(pythonSuper.string1)

まあ、それは完全に真実ではありません。少なくとも私の知る限り、スーパークラスはまったく問題ありません。奇妙なのはサブクラスです

from stackoverflow.questions import pythonSuper
class pythonSub(pythonSuper):
    pass

pythonObject = pythonSub()
pythonSub.pythonSuper.printS()

サブクラスが実行されると、Eclipse はこのエラーを出力します

Traceback (most recent call last):
   File "C:\Users\Anish\workspace\Python 3.3\stackoverflow\questions\pythonSub.py",           
   line 7, in <module>
class pythonSub(pythonSuper):
TypeError: module.__init__() takes at most 2 arguments (3 given)

何が起こっているのかわかりません。私は thenewboston のチュートリアルから python を学んでいますが、それらは時代遅れです (彼のチュートリアル コードは python バージョン 2.7 を使用していると思います)。また、彼は IDLE でコーディングしています。つまり、彼のクラスはすべて 1 つのファイルに含まれています。ただし、私のものはすべて独自のファイルにコーディングされています。つまり、発生しているコード エラーが古い構文によるものなのか、この言語に関する知識不足によるものなのか、私にはわかりません。しかし、私は脱線します。コードがうまくいかない理由とそれを修正するために私ができることの解決策および/または説明を誰かが投稿できれば. 説明が望ましいでしょう。コードをコピーして貼り付けて動作することを確認するよりも、同様の状況で問題を回避して修正できるように、何が間違っているのかを知りたいです。ありがとう、そして私はあなたの答えを楽しみにしています

4

2 に答える 2

3

いくつかの変更はありますが、コードを実行しましたが、完全に実行されます。これが私のコードです:

pythonSuper:

class pythonSuper:
    string1 = 'hello'
    def printS(self):
        print(self.string1)

主要:

from pythonSuper import pythonSuper as pySuper

class pythonSub(pySuper):
    pass

pythonObject = pythonSub()
pythonObject.printS()

注:コードに加えた変更は次のとおりです。

あなたのコードでは、スーパークラスから直接継承されたメソッドを既にサポートしているpythonSub.pythonSuper.printS()ため、どちらが正しくないかを書きました。したがって、そのステートメントでスーパークラスを明示的に参照する必要はありません。前述のステートメントを置き換えるために使用したステートメントは、この問題に対処しているようです。pythonSubprintS()pythonObject.printS()

于 2012-07-21T21:21:04.123 に答える
0

pythonSuperクラスではなく、モジュールを参照します。

class pythonSub(pythonSuper.pythonSuper): 
    pass
于 2012-07-21T21:07:28.600 に答える