Форум сайта python.su
всем привет
в питоне только начинаю разбираться.
возникло желание сделать класс наследник стандартного int с дополнительными проверками
допустим так
from types import *
class MyInt(int):
def get(self,new):
if new>0:
self=new
но при вызове
a=MyInt()
a.get(2)
print(a)
Офлайн
CraMasну смотри:
всем привет
в питоне только начинаю разбираться.
возникло желание сделать класс наследник стандартного int с дополнительными проверками
допустим такничего хорошего не вижу((( выдает 0from types import *
class MyInt(int):
def get(self,new):
if new>0:
self=new
но при вызове
a=MyInt()
a.get(2)
print(a)
как я понимаю должно быть self.чтототам=new
так же хотелось чтобы при обращении а=5, он все еще считал переменную объектом моего класса, а не забывал про это и делал ее типа int
def get(self,new):
if new>0:
print(new)
Офлайн
from types import *
class MyInt(int):
def get(self,new):
if new>0:
self.value=new
def __str__(self):
return str(self.value)
a=MyInt()
a.get(2)
print(a)
Офлайн
Для корректного вывода в консоли можно добавить и __repr__:
from types import *
class MyInt(int):
def get(self,new):
if new>0:
self.value=new
def __str__(self):
return str(self.value)
__repr__=__str__
a=MyInt()
a.get(2)
print(a)
Офлайн
from types import *
class MyInt(int):
def __init__(self, number):
super(MyInt, self).__init__(number)
a = MyInt(12)
print a
Офлайн
спасибо огромнейшее, буду пробовать)))
Офлайн
Ferromanвыдает ошибкуfrom types import *
class MyInt(int):
def __init__(self, number):
super(MyInt, self).__init__(number)
a = MyInt(12)
print a
Офлайн
а как насчет, чтобы при обращении а=5, он все еще считал переменную объектом моего класса, а не забывал про это и делал ее типа int?? или это уже заоблачные требования?
Офлайн
При наследовании от встроенных типов нужно перекрывать __new__, а не __init__.
a = 5 всегда будет игнорировать текущее значение (и тип, конечно) переменной a. Это - Питон.
Контроль есть только над доступом к атрибутам класса.
Офлайн
Странно, я код проверил в bpython, перед тем как разместить.
Офлайн