自己に作用するメソッドを持つPythonのクラス。継承

私はそれが私にとっては、問題を説明するのは簡単かもしれないと思う 私自身のベクトルクラスを作成したいとします。 そのクラスでは、2つのベクトルを追加するメソッドを定義したいとしましょう 何かのようなもの:

class vector:
.....
def add(self,other):
    ----some code

ですから、基本的にはベクトルがvecの場合 次に

vec.add(othervec)

追加を行います.. しかし、私はこれをどうやって... そのようなあなたのクラスを継承しています..データ型 ? ありがとう

0

3 答え

2つのクラスを追加したい場合は、通常の追加( .add()の呼び出しはできません)を可能にする __ add

a + b

あなたの質問については、あなたが何を求めているのか正確には分かりません。私は以下のように Vector()クラスを作成しました:

class Vector:
  def __init__(self, x = 0, y = 0, z = 0):
    self.x = x
    self.y = y
    self.z = z

  def __add__(self, other):
    return Vector(self.x + other.x, self.y + other.y, self.z + other.z)
3
追加された
クール..これは動作:)または私はこれも動作すると思う..私たちはclass Vector(オブジェクト)としてクラスを宣言する場合:??右??
追加された 著者 Fraz,
確かに。オブジェクトが .x.y 、および .z のプロパティを持つ限り、これは正常に動作します。
追加された 著者 Blender,

Pythonでは、ダックタイピングを使用する必要があります。つまり、タイプについて心配する必要はありません。

class Vector(object):
  def __init__(self, x, y):
    self.x = x
    self.y = y
  def add(self, othervec):
    return Vector(self.x + othervec.x, self.y + othervec.y)

必要に応じて、新しいオブジェクトを返す代わりに add 変更することができます。しかし、それはあなたのクラスを変更可能にし、したがって扱いにくくなります:

  def add_mutable(self, othervec):
    self.x += othervec.x
    self.y += othervec.y
2
追加された

あなたが言ったように正確に行うことができます、リストの機能を追加/変更したいとします

class Vector(list):

    def add(self, v):
        list.extend(self, v)

あなたはこれを次のように使うことができます:

> v = Vector([1,2,3])
> v.add([4,5,6])
> print v
> [1, 2, 3, 4, 5, 6]
1
追加された