klasse in python met methode die op zichzelf inwerkt. erfenis

Ik denk dat het voor mij gemakkelijk zou zijn om de vraag uit te leggen met een voorbeeld Stel dat ik mijn eigen vectorklasse wil schrijven. En laat in die klas zeggen dat ik een methode wil definiëren om twee vectoren toe te voegen zoiets als:

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

dus wat dit in feite zal doen, is .. als een vector vec is dan

vec.add(othervec)

zal de toevoeging doen .. maar hoe doe ik dit .. het is net als het overerven van je eigen klasse..datatype ? Bedankt

0

3 antwoord

Als u twee klassen wilt toevoegen, kijk ik naar de functie __ add __ , waarmee u de normale toevoeging kunt doen (en niet .add() ) kunt aanroepen:

a + b

Wat betreft uw vraag, ik weet niet precies wat u vraagt. Ik schreef mijn Vector() -klasse als volgt:

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
toegevoegd
Cool .. Dit werkt :) Of ik denk dat dit ook zal werken .. als we class class class (object) verklaren: ?? rechts??
toegevoegd de auteur Fraz, de bron
Zeker. Zolang het object de eigenschappen .x , .y en .z heeft, zou dit prima moeten werken.
toegevoegd de auteur Blender, de bron

In Python moet je duck typing gebruiken, dus maak je geen zorgen over het type überhaupt:

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)

Als u wilt, kunt u toevoegen wijzigen het Vector-object in plaats van een nieuw te retourneren. Dat maakt je klasse echter veranderlijk en daarom moeilijker om mee om te gaan:

  def add_mutable(self, othervec):
    self.x += othervec.x
    self.y += othervec.y
2
toegevoegd

Je kunt precies doen wat je zei, stel dat je functionaliteit van de lijst wilt toevoegen/wijzigen

class Vector(list):

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

en je kunt het zo gebruiken:

> v = Vector([1,2,3])
> v.add([4,5,6])
> print v
> [1, 2, 3, 4, 5, 6]
1
toegevoegd