2010-05-09 10 views

risposta

25

ci sono due opzioni:

  • instanciate un oggetto nella classe, quindi chiamare il metodo desiderato su di esso
  • uso @classmethod per trasformare una funzione in un metodo di classe

Esempio:

class A(object): 
    def a1(self): 
     """ This is an instance method. """ 
     print "Hello from an instance of A" 

    @classmethod 
    def a2(cls): 
     """ This a classmethod. """ 
     print "Hello from class A" 

class B(object): 
    def b1(self): 
     print A().a1() # => prints 'Hello from an instance of A' 
     print A.a2() # => 'Hello from class A' 

Oppure utilizzare l'ereditarietà, se del caso:

class A(object): 
    def a1(self): 
     print "Hello from Superclass" 

class B(A): 
    pass 

B().a1() # => prints 'Hello from Superclass' 
+1

orribile e illeggibile IMHO. –

+3

Qui non esiste più ereditarietà. Questa è un'eredità singola, sebbene sia possibile che tu stia pensando all'eredità gerarchica. – Nikwin

+0

@Nikwin, +1 come stavo per dirlo. –

6

si crea una classe da cui ereditano entrambe le classi.

C'è un'eredità multipla, quindi se hanno già un genitore non è un problema.

class master(): 
    def stuff (self): 
     pass 

class first (master): 
    pass 


class second (master): 
    pass 


ichi=first() 
ni=second() 

ichi.stuff() 
ni.stuff() 
21

Ci sono diversi approcci:

  • Inheritance
  • delegazione
  • Super-subdolo delegazione

Gli esempi seguenti utilizzano ogni per condividere una funzione che stampa un membro.

Inheritance

class Common(object): 
    def __init__(self,x): 
     self.x = x 
    def sharedMethod(self): 
     print self.x 

class Alpha(Common): 
    def __init__(self): 
     Common.__init__(self,"Alpha") 

class Bravo(Common): 
    def __init__(self): 
     Common.__init__(self,"Bravo") 

delegazione

class Common(object): 
    def __init__(self,x): 
     self.x = x 
    def sharedMethod(self): 
     print self.x 

class Alpha(object): 
    def __init__(self): 
     self.common = Common("Alpha") 
    def sharedMethod(self): 
     self.common.sharedMethod() 

class Bravo(object): 
    def __init__(self): 
     self.common = Common("Bravo") 
    def sharedMethod(self): 
     self.common.sharedMethod() 

Super-subdolo delegazione
Questa soluzione si basa fuori del fatto che non v'è nulla di speciale membro Python funzioni; è possibile utilizzare qualsiasi funzione o oggetto richiamabile purché il primo parametro sia interpretato come l'istanza della classe.

def commonPrint(self): 
    print self.x 

class Alpha(object): 
    def __init__(self): 
     self.x = "Alpha" 
    sharedMethod = commonPrint 

class Bravo(object): 
    def __init__(self): 
     self.x = "Bravo" 
    sharedMethod = commonPrint 

Oppure, un modo simile subdolo di ottenere la delega è quello di utilizzare un oggetto invocabile:

class Printable(object): 
    def __init__(self,x): 
     self.x = x 
    def __call__(self): 
     print self.x 

class Alpha(object): 
    def __init__(self): 
     self.sharedMethod = Printable("Alpha") 

class Bravo(object): 
    def __init__(self): 
     self.sharedMethod = Printable("Bravo") 
Problemi correlati