Перегрузка методов класса Python - PullRequest
1 голос
/ 10 ноября 2011

Как я могу перегрузить методы класса?Я потерпел неудачу с:

class D(object):
    def create(self):
        foo = 100
        bar = 'squirrels'
        baz = 'I have %d insane %s in my head.' % (foo, bar)
        return baz     

class C(D):
    def create(self):
        super(C, self).create()
        baz = 'I have %s cute %s in my yard.' % (self.foo, self.bar)

C().create()

Трассировка была:

AttributeError: 'C' object has no attribute 'foo'

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Вы пытались использовать локальные переменные в качестве атрибутов класса. Попробуйте внести следующие изменения:

class D(object):
    def create(self):
        self.foo = 100
        self.bar = 'squirrels'
        baz = 'I have %d insane %s in my head.' % (self.foo, self.bar)
        return baz

class C(D):
    def create(self):
        super(C, self).create()
        print self.foo
        self.baz = 'I have %s cute %s in my yard.' % (self.foo, self.bar)

C().create()
0 голосов
/ 10 ноября 2011

В D.create вы не устанавливаете переменные на self, что означает, что переменная foo является локальной переменной этой функции.

class D(object):
    def create(self):
        self.foo = 100
        self.bar = 'squirrels'
        self.baz = 'I have %d insane %s in my head.' % (self.foo, self.bar)
        return self.baz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...