Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 21, 2010 14:09:09

CraMas
От:
Зарегистрирован: 2010-06-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

наследование стандартных классов

всем привет
в питоне только начинаю разбираться.
возникло желание сделать класс наследник стандартного 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



Офлайн

#2 Июнь 21, 2010 16:26:10

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

наследование стандартных классов

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))



Офлайн

#3 Июнь 21, 2010 16:32:30

Ole
От:
Зарегистрирован: 2009-11-23
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

наследование стандартных классов

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)



Офлайн

#4 Июнь 21, 2010 18:04:58

gabin
От:
Зарегистрирован: 2009-03-07
Сообщения: 72
Репутация: +  0  -
Профиль   Отправить e-mail  

наследование стандартных классов

Для корректного вывода в консоли можно добавить и __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)



Офлайн

#5 Июнь 22, 2010 23:47:10

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

наследование стандартных классов

from types import *
class MyInt(int):
def __init__(self, number):
super(MyInt, self).__init__(number)

a = MyInt(12)
print a

Офлайн

#6 Июнь 23, 2010 12:54:27

CraMas
От:
Зарегистрирован: 2010-06-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

наследование стандартных классов

спасибо огромнейшее, буду пробовать)))



Офлайн

#7 Июнь 23, 2010 13:01:04

CraMas
От:
Зарегистрирован: 2010-06-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

наследование стандартных классов

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)



Офлайн

#8 Июнь 23, 2010 13:03:30

CraMas
От:
Зарегистрирован: 2010-06-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

наследование стандартных классов

а как насчет, чтобы при обращении а=5, он все еще считал переменную объектом моего класса, а не забывал про это и делал ее типа int?? или это уже заоблачные требования?



Офлайн

#9 Июнь 23, 2010 16:52:01

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

наследование стандартных классов

При наследовании от встроенных типов нужно перекрывать __new__, а не __init__.

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

Контроль есть только над доступом к атрибутам класса.



Офлайн

#10 Июнь 23, 2010 18:31:06

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

наследование стандартных классов

Странно, я код проверил в bpython, перед тем как разместить.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version