2

私は今PythonOOPを学んでいて、以下のコードの何かと混同しています。

質問:

  1. def __init__(self, radius=1): 引数/属性「radius=1」は正確にはどういう意味ですか?なぜそれは単に「半径」と呼ばれないのですか?

  2. メソッドarea()には、引数/属性「radius」はありません。コードのどこから「半径」を取得しますか?半径が5であることをどうやって知るのですか?

    class Circle:
        pi = 3.141592
    
        def __init__(self, radius=1):
            self.radius = radius 
    
        def area(self):
            return self.radius * self.radius * Circle.pi
    
        def setRadius(self, radius):
            self.radius = radius
    
        def getRadius(self):
            return self.radius
    
    c = Circle()
    
    c.setRadius(5)
    

また、

  1. 以下のコードnameで、括弧内に属性/引数がないのはなぜですか?

  2. なぜこのように書かれていなかったのですか:def __init__(self, name) そしてdef getName(self, name)

    class Methods:
        def __init__(self):
            self.name = 'Methods'
    
        def getName(self):
            return self.name
    
4

3 に答える 3

8

def method(self, argument=value):構文は、デフォルト値を使用してキーワード引数を定義します。その引数の使用はオプションになりました。指定しない場合は、代わりにデフォルト値が使用されます。あなたの例では、それradiusはに設定されていることを意味し1ます。

インスタンスは、メソッド内でselfパラメーターを使用して参照されます。nameとのradius値は属性(と)として保存され 、後でその名前付き属性( 、 )を参照して取得できます。selfself.name = 'Methods'self.radius = radiusreturn self.namereturn self.radius * self.radius * Circle.pi

Pythonチュートリアルに従うことを心からお勧めします。これについては、これ以上のことを説明します。

于 2012-09-15T09:41:09.020 に答える
1
def __init__(self, radius=1):
    self.radius = radius 

c.Area()これは、クラススコープの変数を初期化するためのデフォルト値設定です。これは、一部のユーザーがの直後に呼び出した場合にガベージ出力を回避するためc = Circle()です。

In the code below, why is the attribute/argument "name" missing in the brackets? 

この行では、文字列値に初期化されself.name = 'Methods'た変数を作成しています。nameMethods

def init(self、name)とdef getName(self、name)のように書かれていないのはなぜですか?

self.nameクラススコープに対して定義されます。クラス内のどこでもその値を取得および設定できます。

于 2012-09-15T09:44:45.923 に答える
0
  1. 構文は、デフォルト値が次radius = 1のパラメータ「radius」を指定します。1

    def my_func(param = 1):... print(param)... my_func()#デフォルト値1を使用my_func(2)#渡された値2を使用

Pythonには、より多くの種類のパラメーターが存在することに注意してください。位置パラメーターとキーワードパラメーター、またはその両方です。

通常、パラメータは、位置表記とキーワードの両方を使用して割り当てることができます。

>>> def my_func(a,b,c):
...     print (a,b,c)
... 
>>> my_func(1,2,3)
(1, 2, 3)
>>> my_func(1,2,c=3)
(1, 2, 3)
  1. Pythonは「明示的な」インスタンスの受け渡しを使用するため、最初のselfパラメーターは、メソッドが呼び出されるインスタンスを渡すために使用されます。あなたはJavaのselfものと考えることができます。thisただし、インスタンスの属性/メソッドにアクセスするには、常にこれを使用する必要があります。あなたはただ呼ぶことはできませんarea()、あなたは言わなければなりませんself.area()

実行するときは、値をself.attribute = 1使用して新しい属性を作成し、それをインスタンスに割り当てます。したがって、メソッドではインスタンスの属性を参照します。attribute1selfarea()self.radiusradiusself

この__init__方法は特別な方法です。コンストラクターに似ています。クラスをインスタンス化するときに呼び出されます。Pythonには、これらの「特別なメソッド」がたくさんあります。たとえば、__add__(self, other)演算子を使用するとメソッドが呼び出され+ます。

于 2012-09-15T09:40:55.500 に答える