2017-07-22 5 views
1
class myClass: 

    def __init__(self, text): 
      self.text = text 

    def printText(text): 
      more_text = "Why so " 

      return more_text + text 

上記は、私がウェブページからデータを抽出するために構築しているコードのオーバーライドされたバージョンです。私はこのようなtemp.pyコードを実行しています。クラス内で 'str'オブジェクトと 'instance'オブジェクトを連結できないのはなぜですか?

>>> from temp import myClass 
>>> text = "serious?" 
>>> joker_says = myClass(text) 
>>> 
>>> print joker_says.printText() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "temp.py", line 9, in printText 
    return more_text + text 
TypeError: cannot concatenate 'str' and 'instance' objects 

Stack Overflowでは、 'str'オブジェクトと 'instance'オブジェクトの連結に関する問題の多くの例があります。

OPTION 1:

私は、次の方法を試してみましたINPUT

class myClass: 

    def __init__(self, str(text)): 
      self.text = text 

    def printText(text): 
      more_text = "Why so " 

      return more_text + text 

しかし、私は取得AS のinit DURING文字列にテキストを変換...

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "temp.py", line 3 
    def __init__(self, str(text)): 
        ^
SyntaxError: invalid syntax 

== == == == == ==

オプション2:テキストを変換するSTRING のinit STEP

class myClass: 

    def __init__(self, text): 
      self.text = str(text) 

    def printText(text): 
      more_text = "Why so " 

      return more_text + text 

DURINGしかし、私は...

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "temp.py", line 9, in printText 
    return more_text + text 
TypeError: cannot concatenate 'str' and 'instance' objects 

は、誰かが私に問題に良い解決策をお願いすることができますか?私のオリジナルコードでは、クラス内の2つの文字列オブジェクトを連結してWebページリンクを作成することを意図しています。どんな提案もありがとうございます。

+1

'' printText'は*あなた*メソッドの最初の引数である中text'が、それはこのように、それはないだろう、暗黙的にインスタンスを渡す*であるため、作業。 –

答えて

3

あなたがここに夫婦の問題を持っている:

あなたがオブジェクトのために作成するすべての機能では、selfは、最初のパラメータとして含まれている必要があります。

あなたの第二の例の使用:次に

class myClass: 

    def __init__(self, text): 
      self.text = str(text) 

    def printText(self, text): 
      more_text = "Why so " 

      return more_text + text 

を、あなたはあなたのクラスのインスタンスを作成し、あなたが機能printTextアクセスすることができます:あなたはと同じテキストを使用したい場合は

joker = myClass("This is some text") 
print(joker.text) # This prints: "This is some text" 
print(joker.printText("serious?")) # This prints "Why so serious?" 

をテキストの初期化では、クラスの属性として新しいパラメータtextの代わりに参照する必要があります。

class myClass: 

    def __init__(self, text): 
      self.text = str(text) 

    def printText(self): 
      more_text = "Why so " 

      return more_text + self.text 

その後、あなたは上記を参照したい場合:

joker = myClass("serious?") 
print(joker.text) # This prints: "serious?" 
print(joker.printText()) # This prints "Why so serious?" 
+1

ありがとう!分かったと思います。しかし、あなたが指摘したように、defのprintTextには自己があるべきですが、テキストはありません。そうすれば、printDataは2つの入力を探しません。私は迅速な対応に感謝します! – troymyname00

2

あなたが直面している主な問題はこれです:

def printText(text): 

インスタンスメソッドとして、宣言は、あなたがself(インスタンスオブジェクト)を持っていることを期待、ため、このエラーを得ている理由があるのとして渡されました最初の議論。現在、自己(インスタンス)として使用されているtextを渡しています。これは実際にはを実行しているものがのインスタンスを含む文字列を追加しようとしているため、エラーが発生する理由です。

ので、printTextに暗黙的に渡される最初の引数はインスタンスで、あなたのメソッド内で見て、あなたが実際にがあなたのprintTextメソッド内self.textを参照するために欠けていることを知っています。ただし、お客様のインスタンスprintTextに渡されている場合は、実際にはtextと呼ばれます。これは非常に混乱する可能性があります。

したがって、推奨されている命名法に従えば、インスタンス引数を「期待される」自己という名前にする必要があります。

これを念頭に置いて、ご参考申し上げるtextは、self.textとして参照できます。これはあなたのコードを固定することによって示すことができ

def printText(self): 
     more_text = "Why so " 

     return more_text + self.text 
+1

OPは 'print joker_says.printText()'を使用していますので、引数が見つからないため 'TypeError'がスローされます。 –

+1

@ juanpa.arrivillaga Shoot。あなたは、本当の問題が何であるかを私に知らせてくれました。それを持っていただきありがとうございます。 – idjaw

+0

@ juanpa.arrivillagaありがとうございます。それを私が直した。 – idjaw

関連する問題