Найти - Пользователи
Полная версия: наследование стандартных классов
Начало » Python для новичков » наследование стандартных классов
1 2
CraMas
всем привет
в питоне только начинаю разбираться.
возникло желание сделать класс наследник стандартного int с дополнительными проверками
допустим так
from types import *
class MyInt(int):
def get(self,new):
if new>0:
self=new
но при вызове
a=MyInt()
a.get(2)
print(a)
ничего хорошего не вижу((( выдает 0

как я понимаю должно быть self.чтототам=new

так же хотелось чтобы при обращении а=5, он все еще считал переменную объектом моего класса, а не забывал про это и делал ее типа int
apologize828
CraMas
всем привет
в питоне только начинаю разбираться.
возникло желание сделать класс наследник стандартного int с дополнительными проверками
допустим так
from types import *
class MyInt(int):
def get(self,new):
if new>0:
self=new
но при вызове
a=MyInt()
a.get(2)
print(a)
ничего хорошего не вижу((( выдает 0

как я понимаю должно быть self.чтототам=new

так же хотелось чтобы при обращении а=5, он все еще считал переменную объектом моего класса, а не забывал про это и делал ее типа int
ну смотри:
ты создаешь a=Myint() а это у тебя и есть 0
так что неудивительно что print(a) выдает тебе 0)))
    def get(self,new):
if new>0:
print(new)
и тогда вызываешь только метод a.get(2)
и получешь 2))
Ole
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)
gabin
Для корректного вывода в консоли можно добавить и __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)
Ferroman
from types import *
class MyInt(int):
def __init__(self, number):
super(MyInt, self).__init__(number)

a = MyInt(12)
print a
CraMas
спасибо огромнейшее, буду пробовать)))
CraMas
Ferroman
from types import *
class MyInt(int):
def __init__(self, number):
super(MyInt, self).__init__(number)

a = MyInt(12)
print a
выдает ошибку
E:\Programming\python\test1\src\test2.py:6: DeprecationWarning: object.__init__() takes no parameters
super(MyInt, self).__init__(number)
CraMas
а как насчет, чтобы при обращении а=5, он все еще считал переменную объектом моего класса, а не забывал про это и делал ее типа int?? или это уже заоблачные требования?
Андрей Светлов
При наследовании от встроенных типов нужно перекрывать __new__, а не __init__.

a = 5 всегда будет игнорировать текущее значение (и тип, конечно) переменной a. Это - Питон.

Контроль есть только над доступом к атрибутам класса.
Ferroman
Странно, я код проверил в bpython, перед тем как разместить.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB