🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

547閲覧

クラス内のメソッドが機能せず

okahijiki

総合スコア404

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/10/07 08:11

「解決済み」とさせて頂きましたが、早合点しておりました。
先の同様の質問にお答え頂いた方には、恐縮であります。
再掲にて、失礼いたします。


クラスをつくってみました。
がしかし、クラス内の、ひとつのメソッド(XORメソッド)が、うまく機能しません。
どのようにしたら良いか、どうぞ、ご教示くださいませ。

クラスは以下の通りです。

python

1class logicCircuit: 2 def __init__(self,a,b): 3 self.a = a 4 self.b = b 5 6 def AND(self): 7 if 0 in [self.a,self.b]: 8 return 0 9 else: 10 return 1 11 12 def OR(self): 13 if 1 in [self.a,self.b]: 14 return 1 15 else: 16 return 0 17 18 def NAND(self): 19 if 0 in [self.a,self.b]: 20 return 1 21 else: 22 return 0 23 24 def XOR(self): 25 s1=self.OR() 26 s2=self.NAND() 27 y=self.AND(s1,s2) 28 print(y)

インスタンス化した後の、メソッドのアウトプットは、次の通りです。

python

1output = logicCircuit(0,0) 2 3output.AND() 40 5 6output.OR() 70 8 9output.NAND() 101 11 12output.XOR() 13--------------------------------------------------------------- 14TypeError Traceback (most recent call last) 15<ipython-input-9-9f880d5f3490> in <module> 16----> 1 output.XOR() 17 18<ipython-input-4-b416e483a293> in XOR(self) 19 25 s1=self.OR() 20 26 s2=self.NAND() 21---> 27 y=self.AND(s1,s2) 22 28 print(y) 23 24TypeError: AND() takes 1 positional argument but 3 were given 25

引数の数が合っていない...ということで、どこかにselfを明示的に入れるのかな、と思ったりもしています。
よろしく、お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ANDの定義では引数はなし(selfのみ)であるにもかかわらず、
呼び出しでs1とs2を渡しているのが原因です。
aとbをinitで定義してしまっているので、複雑になっています。

python

1class logicCircuit: 2# def __init__(self): 3# self.a = a 4# self.b = b 5 6 def AND(self, a, b): 7 if 0 in [a, b]: 8 return 0 9 else: 10 return 1 11 12 def OR(self, a, b): 13 if 1 in [a, b]: 14 return 1 15 else: 16 return 0 17 18 def NAND(self, a, b): 19 if 0 in [a, b]: 20 return 1 21 else: 22 return 0 23 24 def XOR(self, a, b): 25 s1=self.OR(a, b) 26 s2=self.NAND(a, b) 27 y=self.AND(s1,s2) 28 print(y)

通常は上記のような形でないでしょうか。

投稿2019/10/07 08:23

qax

総合スコア622

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2019/10/07 08:32

しかしそうなるとクラスを組む必要が無くなってしまうのですよね。
okahijiki

2019/10/07 08:58

ご回答、ありがとうございまーす。 インスタンス化するときに引数を入れず、 output = logicCircuit() そののち、 output.XOR(0,0)にて、クリアできましたー。 それぞれの関数の引数に(self)だけでなく、(self,a,b)とするのは、(たぶん)理解できていると存じます。 def __init__については、「とりあえず、入れておこう」的な感じがありまして。こちらについては、これからの宿題とさせてくださいませ。
guest

0

ベストアンサー

Pythonの仕様上の問題ではなく、設計の意図に沿わない使い方が問題です。
次のように書くのが正解では?

Python

1def XOR(self): 2 s1=self.OR() 3 s2=self.NAND() 4 5 y = logicCircuit(s1, s2).AND() 6 # print(y) 7 return y

投稿2019/10/07 08:20

編集2019/10/07 08:21
LouiS0616

総合スコア35668

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

okahijiki

2019/10/07 08:58

できましたー。 どういう「経路」でクリアされたのか、僕としては、複雑であります。どうぞ、これからの宿題とさせてくださいませ。ご回答、ありがとうございました。 先にお答え頂いたということで、「ベストアンサー」とさせて頂きまました。(書き言葉にすると、どうしても生意気な言い方になってしまいます。す、すみません)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問