2017-03-29 11 views
1

2つの必須の位置引数が欠けているというエラーが表示されます: 'height'と 'radius'。私はすべてを試したような気がしますが、私は何か小さいものを見逃していることを知っていますどんな助け? おかげbuiltins.TypeError:__init __()missing 2必要な位置引数: 'height'と 'radius'

# import math 
import math 

class SodaCan : 
    # Constructs sodaCan with a given height and radius 
    # @param height = given height and radius = given radius 
    def __init__(self, height, radius): 
     self._height = height 
     self._radius = radius 

    # Constructs the volume with the given height and radius 
    def volume(self): 
     self._volume = (pi * (self._radius ** 2) * self._height) 

    # Constructs the Surface Area with the given height and radius 
    def surfaceArea(self): 
     self._surfaceArea = (2 * pi * self._radius * self._height) + (2 * pi * (self._radius)**2) 

    # Return the volume 
    def getVolume(self): 
     return self._volume 

    # Return the Surface Area 
    def getSurfaceArea(self): 
     return self._surfaceArea 

は、私がここで間違ってやっているのかわからないです。下に私のコードのテストプログラムがあります。あなたはこのような初期化子定義すると

## 
# This program test the sodaCan.py 
## 

# import math so the program can read pi 
import math 

# from the file folder, ipmort the code from program 'sodaCan' 
from sodaCan import SodaCan 

mySodaCan = SodaCan() 
mySodaCan.height(10) 
mySodaCan.radius(4) 

print(mySodaCan.getVolume()) 
print(mySodaCan.getSurfaceArea()) 
+1

の可能性のある重複した[例外TypeError:受け入れるには(まだ機能)2つの必要な引数が不足している](http://stackoverflow.com/questions/20380276/typeerror-accept-missing-2-required -aduments-still-functional) –

+0

あなたはSodaCanをどのように呼び出しているかを示すことができますか(つまりx = SodaCan(5,4)ですか?)(可能な複製が正しい場合は、さらにコードを表示する必要があります) – Foon

答えて

2

class SodaCan: 

    def __init__(self, height, radius): 
     ... 

をあなたはその高さと半径を言っているのを必要としています。ソーダ缶のインスタンスを作成するには、それらを指定する必要があります。

mySodaCan = SodaCan(height=10, radius=4) 

あなたがそれらはオプションになりたい場合は、__init__メソッドを定義するとき、あなたはこれらの引数のデフォルト値を指定することもできます。次に、インスタンスを作成するときに、インスタンスを作成するときに省略された場合、引数はデフォルト値になります。

+2

@MakieMichauxはい、複数のエラーがあるようです。メッセージもかなり明らかです。 'self._volume'は定義されていません。私はあなたがここでなぜあなたのコードをデバッグするのではなく、このサイトが何のために設計されているのかを考えてみることをお勧めします。 –

2

クラスを初期化するときに、高さと半径を渡す必要があります。 initクラスの引数は、クラスを初期化するときに渡す必要があることを意味します。このような何かが働くだろう:

height = 40 
radius = 10 
a = SodaCan(height, radius) 
関連する問題