Форум сайта python.su
Доброго времени суток уважаемые!
Дайте совет как решить задачу.
Условие задачи:
Сконструировать класс
Условие 1. класс должен иметь свойства целого числа.
Например:
class Entity:
…
var = Entity()
var = 5
print var -> 5
var += 3
print var -> 8
и это понятно как сделать.
Есть ли возможность выполнить второе условие?
Условие 2. экземпляр класса должен иметь возможность получить доп. данные:
синтаксически должно выглядеть так:
var = Entity()
var = 5
print var -> 5
var += 3
print var -> 8
print var.delta -> 3
либо иметь возможность вызвать некий метод этого класса
var.MyMethod(*args)
У меня пока ничего не выходит :/
Отредактировано (Июнь 3, 2009 12:42:49)
Офлайн
Вопрос больше соответствует разделу ‘Python для новичков.’
http://www.python.org/doc/2.5/ref/numeric-types.html
Офлайн
ох и намучился я с этой задачкой)
вариант с переопределением всем методов __add__, __mul__, __sub__, __iadd__, и прочих отметаем сразу.
и первое, что приходит на ум - это такой код:
class eint(int):
def __init__(self, integer, delta=0):
int.__init__(self, integer)
self.delta = delta
def __iadd__(self, delta):
return eint(int(self) + delta, delta=delta)
File "C:/Python25/ext_integer.py", line 27, in __iadd__
return eint(int(self) + delta, delta=delta)
TypeError: 'delta' is an invalid keyword argument for this function
class eint(int):
def __new__(cls, integer, delta=0):
return int.__new__(cls, integer)
def __init__(self, integer, delta=0):
self.delta = delta
def __iadd__(self, delta):
return eint(int(self) + delta, delta=delta)
Офлайн
На самом деле __init__ не нужен.
class eint(int):
def __new__(cls, integer, delta=0):
ret = int.__new__(cls, integer)
ret.delta = delta
return ret
def __iadd__(self, delta):
return eint(int(self) + delta, delta=delta)
Офлайн
Dimka665Спасибо огромное тезка, за время потраченное на меня,
ох и намучился я с этой задачкой)
slivlen, несколько труднее относится к делу с вниманием.
Вопрос больше соответствует разделу ‘Python для новичков.’
http://www.python.org/doc/2.5/ref/numeric-types.html
Офлайн
Андрей СветловАндрей, спасибо за оптимизацию и за ссылку на доку.
На самом деле __init__ не нужен.
Офлайн
ds40aАга, и еще труднее внимательно прочитать собственное задание перед тем как постить на форум:
Легче, конечно, написать , несколько труднее относится к делу с вниманием.
Условие 1. класс должен иметь свойства целого числа.
Например:
class Entity:
...
Офлайн
slivlenУважаемый, slivlen, если вы считаете , что создать класс с нуля эквивалентный классу int упражнение для начинающих, аds40aАга, и еще труднее внимательно прочитать собственное задание перед тем как постить на форум:
Легче, конечно, написать , несколько труднее относится к делу с вниманием.Судя по заданию требуется создать именно класс с нуля, а не наследовать от int.Условие 1. класс должен иметь свойства целого числа.
Например:
class Entity:
...
Офлайн
ds40aЯ считаю что и то и другое решается простым чтением документации Python или гуглением и человек не способный на такое - это, однозначно, новичек или лентяй.
Уважаемый, slivlen, если вы считаете , что создать класс с нуля эквивалентный классу int упражнение для начинающих, а
унаследовать новый класс от int - занятие для гуру,
тогда примите мои извинения. Действительно - не туда попал. Пойду в песочницу smile
Офлайн