2013-08-29 4 views
1

Так что это мой код, я пытаюсь получить класс Rectangle для наследования класса объектов. Я не понимаю, что это значит для класса объектов и как его наследует.Определение класса: как наследовать от класса объекта

class Rectangle: 

def __init__(self, coords, sizex, sizey): 
    self._startx, self._starty = coords 
    self._sizex = sizex 
    self._sizey = sizey 

def getBottomright(self): 
    '(%s, %s)' % (self._startx + self._sizex, self._starty + self._sizey) 

def move(self, pos): 
    self._startx, self._starty = pos 

def resize(self, width, height): 
    self._sizex = width 
    self._sizey = height 

def __str__(self): 
    return '((%s, %s), (%s, %s))' % (self._startx, self._starty, self._startx + self._sizex, self._starty + self._sizey) 


r = Rectangle((2, 3), 5, 6) 
print str(r) 
'((2, 3), (7, 9))' 
r.move((5, 5)) 
print str(r) 
'((5, 5), (10, 11))' 
r.resize(1,1) 
print str(r) 
'((5, 5), (6, 6))' 
r.getBottomright() 
(6, 6) 
+2

Просто сделайте 'class Rectangle (object)' – BrenBarn

+0

Обратите внимание, что в Python 2.x вы _always_ хотите наследовать от 'object' (если у вас нет чего-то другого, чтобы наследовать), потому что в противном случае вы получите« старый стиль » класс ", который имеет различные причуды и ограничения, о которых вы не хотите узнавать. – abarnert

+0

Обратите внимание, что в дополнение к объявлению 'class Rectangle (object)' вам также нужно будет отступать блоки 'def', чтобы сделать их методами для класса, а не для глобальных функций. –

ответ

4

наследовать от object, просто положить его в круглых скобках после имени класса:

class Rectangle(object): 

В принципе, синтаксис для наследования как так:

class ClassName(object1, object2, ...): 

В приведенном выше коде , ClassName наследует от object1, object2 и любых других классов, которые вы там размещаете (обратите внимание, что если в парном классе более одного класса энтез, он называется «множественным наследованием»).

Для справки, вот углубленные учебник о классах, наследование и тому подобное:

http://docs.python.org/2/tutorial/classes.html

+0

HAHA wow, хорошо спасибо. Это работает –

+0

Еще один вопрос, код на самом деле не прав, теперь я могу проверить, r.getbottomright возвращает None. Вы знаете, как это исправить? –

+1

Да. Вам нужно вернуть: 'return '(% s,% s)'% (self._startx + self._sizex, self._starty + self._sizey)'. Кроме того, убедитесь, что ваш отступы хороши. – iCodez

2

Чтобы наследовать от object (или любого другого класса), просто поместите класс наследовать в скобках после имени класса, где вы его определяете.

class Rectangle(object): 
    pass #class stuff goes here. 

Что касается вашего другого вопроса, object класса является самым основным классом в Python. Вообще говоря, все классы должны наследоваться напрямую от object, если только они не наследуют что-то еще.

Однако, это звучит, как вы смущены о том, что наследование и классы фактически являются, что означает, что вы, вероятно, должны пойти читать на object-oriented programming в целом, и в частности inheritance.

+0

Спасибо за ответ, все работает сейчас. tyvm –

Смежные вопросы