2016-07-31 5 views
-8

Siehe den folgenden Code:Was ist der Unterschied zwischen b und c?

class A: 
def __init__(self, *args, **kwargs): 
    self.l=[] 
    #self.b=self.l.append 

def foo(self): 
    return 3 


a=[] 
b=A(a.append) 
c=A() 
b.foo() 
print (b, c) 
print (len(a)) 

was ist der Unterschied zwischen Objekten b und c? Genauer gesagt, was ist die Bedeutung von a.append.

+2

Was? 'A .__ init__' tut nichts mit seinen Argumenten, also macht das Übergeben von' a.append' nichts. A wirft es einfach weg. – BrenBarn

+2

es ist nicht einmal gut eingerückt, so Klasse A hat keine Init –

Antwort

3

b und c sind verschiedene Instanzen der Klasse A. Und a.append ist eine Methode zum Anhängen von Wert an die Liste.

1

b = A (a.append) bedeutet hier nichts, da A. init keine Variablen signiert. Die Antwort lautet also: b und c sind nur zwei Objekte mit unterschiedlichem Speicherplatz.

0

überprüfen Kommentar in Code zur Erläuterung zur Verfügung gestellt:

class A: 
    #Constructor to Class A, args contain list of formal arguments and kwargs contains object (dict) of keyward arguments 
    #(4,5,None, test = "Hello", new = True) so args have [4,5,None] and kwargs have {"test":"Hello", "new" : True} 
    def __init__(self, *args, **kwargs): 
     self.l=[] 
     #self.b=self.l.append 

    def foo(self): 
     return 3 


a=[] 
#a is list and mutable data structure 
b=A(a.append) 
#a.append - append is method to list a to put values in list a like a.append(5), a.append(6) so list a is [5,6]. Here a.append provides info to memory location. 
#b is a variable contains reference to object A at mem location X 
c=A() 
#c is a variable contains reference to object A at mem location Y 
#b and c difference, Ideally both are reference to object A but located at diff locations and contains their own set of values/data. 
b.foo() 
print (b, c) 
print (len(a)) 
Verwandte Themen