Форум сайта python.su
0
class Newclass: def __init__(self, base): self.base = base def __add__(self, a): self.base = self.base + a return self.base a = Newclass(10) a + 20 print (a)
class Newclass: def __init__(self, base): self.base = base def __str__(self): return "%s !!! " % self.base a = Newclass(10) print (a)
Офлайн
13
class Newclass: def __init__(self, base): self.base = base def __add__(self, a): self.base = self.base + a return self.base a = Newclass(10) print(a + 20) print (a) ===OUTPUT === 30 <__main__.Newclass object at 0x986df4c>
Отредактировано Alex_HH (Янв. 11, 2015 22:54:05)
Офлайн
103
quaker
этот вопрос говорит о том что у вас очень плохая теоретическая основа, ну и практическая тоже
книгу почитайте!
Офлайн
103
Alex_HHобъекта правильнее будет
отобрражает сроковое представление класса
Alex_HHне переопределили а назначили
а метод адд вы переопредели добавив в него возврат значени
class Newclass(int):
Офлайн
13
terabayt, да спасибо. С первым согласен.
А со вторым, ведь когда пишем:
class Newclass():
class Newclass(object):
class ClassName(): def __init__(self): pass # def __str__(self): # return '45' a = ClassName() print (a.__str__())
Офлайн
39
Alex_HH
Наследование от object касается только 3.Х. В 2.Х необходимо явно наследовать. Это называется классы нового и старого стиля.
Офлайн
103
эт уже в 3 пайтоне
andrey@ubuntu:~$ python3 Python 3.2.3 (default, Feb 27 2014, 21:33:50) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> class A(): ... pass ... >>> b = A() >>> dir(b) ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'] >>> andrey@ubuntu:~$ python Python 2.7.3 (default, Feb 27 2014, 20:00:17) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> class A(): ... pass ... >>> b = A() >>> dir(b) ['__doc__', '__module__'] >>> b.__str__() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: A instance has no attribute '__str__' >>> class C(object): ... pass ... >>> d = C() >>> dir(d) ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
Отредактировано terabayt (Янв. 11, 2015 23:43:52)
Офлайн
13
4kpt_III, у топикастера третий, а я в темы со вторым не лезу, ибо не пользую.
Так я прав или нет?
Офлайн
857
terabayt>>> class A():
class A:
Alex_HHСо вторым случаем - да, со вторым питоном - нет. Пишешь неопределённо, можно попутать.
А со вторым, ведь когда пишем:class Newclass():
Alex_HHПрав, только не надо пустые скобки писать, а то это выглядит, как
Так я прав или нет?
if (a > b): ...
Отредактировано py.user.next (Янв. 12, 2015 02:25:27)
Офлайн
253
Маленькое замечание по теме
Думаю правильнее было назвать тему перегрузкой операторов а не перезагрузкой операторов.
Офлайн