Ich kann super () nicht dazu bringen, in Python 2.7 zu arbeiten
Mit einem einfachen Klassenpaar kann ich nicht super arbeiten:
class A(object):
q = 'foo'
class B(A):
q = 'bar'
def __init__(self):
self.a = super(A, self).q
a = B()
Fehler wie folgt:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-210-802575054d17> in <module>()
5 def __init__(self):
6 self.a = super(A, self).q
----> 7 a = B()
<ipython-input-210-802575054d17> in __init__(self)
4 q = 'bar'
5 def __init__(self):
----> 6 self.a = super(A, self).q
7 a = B()
AttributeError: 'super' object has no attribute 'q'
Ich habe ähnliche Probleme beim Austausch von Stapeln durchgesehen, Dokumentation und Artikel gelesen, und nach allem, was passiert, sollte dies funktionieren. Welche offensichtliche Sache vermisse ich?
BEARBEITEN: Die Antwort ist, dass ich auf die falsche Klasse verweise und sie korrigiere, um das Beispiel zu reparieren, aber nicht meinen echten Code, der unten steht:
class D(object):
pwd = ['~/']
def __init__(self,*args):
if len(args) == 1:
self.cd(args[0])
else:
return
def __str__(self):
if len(self.pwd) == 1:
return self.pwd[0]
else:
return ''.join(self.pwd)
def __add__(self,other):
if type(other) is str:
return str(self) + other
elif type(other) is list:
return pwd + other
def cd(self, directory):
#import pdb; pdb.set_trace()
reset = False
if directory[0] is '~':
reset = True
if directory[0] is '/':
reset = True
directory = directory[1:]
if directory[-1] is '/':
directory = directory[:-1]
directory = [folder+'/' for folder in directory.split('/')]
rverse = directory.count('../')
if rverse > 0 and type(directory) is list:
end = False
for folder in directory:
if folder == '../' and end:
raise Exception('improperly placed ".."')
if folder != '../':
end = True
if reset:
self.pwd = directory
else:
self.pwd = self.pwd + directory
print self
class Dirchanger(D):
def __init__(self,client,*args):
if len(args) == 1:
self.cd(args[0])
def cd(self,directory):
super(D, self).cd(directory)
Offensichtlich ist dieser Code unvollständig, aber er sollte basierend auf der Antwort funktionieren.