質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.37%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

322閲覧

Pythonで継承を使って結果を得る

evansukun

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/31 00:23

Rectangle:6
Square:4
Ellipse:18.84
Circle:12.56
という結果を表示させたいが、

Rectangle:0
Square:0
Ellipse:0
Circle:0

になってしまいなぜかわかりません。
また、PIを継承して使いたいのですが、やり方が分からないです。

Python

1class Shape(object): 2 def get_area(self): 3 return 0 4 5 def get_type(self): 6 return "" 7 8 def __str__(self): 9 return "{}:{}".format(self.get_type(), self.get_area()) 10 11class Rectangle(Shape): 12 13 def __init__(self,w,h):#ここにコードを書く 14 self.wide = w 15 self.hight = h 16 def get_area(): 17 return self.wide * self.hight 18 19 def get_type(self): 20 return "Rectangle" 21 22class Square(Rectangle): 23 def __init__(self, l): 24 25 self.length = l #ここにコードを書く 26 def get_area(): 27 return self.length * self.length 28 29 def get_type(self): 30 return "Square" 31 32class Ellipse(Shape): 33 PI = 3.14 34 35 def __init__(self,a,b):# ここにコードを書く 36 self.major_axis = a 37 self.minor_axis = b 38 def get_area(): 39 return 3.14* self.major_axis * self.minor_axis #PIを継承したいがうまくいかないので3.14で表記 40 def get_type(self): 41 return "Ellipse" 42 43class Circle(Ellipse): 44 def __init__(self, r): 45 46 self.radius = r #ここにコードを書く 47 def get_area(): 48 return 3.14 * self.radius * self.radius #PIを継承したいがうまくいかないので3.14で表記 49 def get_type(self): 50 return "Circle" 51 52shapes = [Rectangle(2, 3), Square(2), Ellipse(2, 3), Circle(2)] 53for shape in shapes: 54 print(shape)

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

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

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

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

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

guest

回答2

0

Rectangel, Circle,...などのサブクラス においてget_areaメソッドが定義されていないです。そのため親クラスのget_areaが呼ばれて0が返っています。__init__の中で定義してもスコープはその中なので、__init__の外に出して、

python

1def get_area(self): 2 return self.wide * self.hight

のようにすると良いと思います。

投稿2020/05/31 00:39

nouken

総合スコア369

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

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

0

ベストアンサー

Rectangleクラスのget_areaを

Python

1def __init__(self,w,h): 2 self.wide = w 3 self.hight = h 4 def get_area(): 5 return self.wide * self.hight 67def __init__(self,w,h): 8 self.wide = w 9 self.hight = h 10def get_area(self): 11 return self.wide * self.hight 12```こうする。Square, Ellipse, Circleのget_areaも同様にインデントを一つ下げて、引数にselfをいれる。

投稿2020/05/31 00:37

ForestSeo

総合スコア2722

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問