Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 4, 2011 22:23:05

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить тип объекта

есть функция
def add(self,user):
Хочу чтоб user был только типа TUser, точнее был экземпляром класса TUser.

Как это проверить? может есть какойто .ClassName?

Или самому вводить подобную переменную в свой класс TUser.
Но не хотелось бы чтоб программа падала если сообщить не правильную переменную в которой не будет моей ClassName

type(User) даёт

<type ‘instance’>



Офлайн

#2 Авг. 4, 2011 23:06:05

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

Определить тип объекта

isinstance(user, TUser)



Офлайн

#3 Авг. 5, 2011 00:25:06

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить тип объекта

Андрей Светлов
Большое спасибо. то что нужно.



Офлайн

#4 Авг. 5, 2011 06:04:42

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить тип объекта

Alex_Kutsan, вы тоже на Delphi писали?



Офлайн

#5 Авг. 5, 2011 09:47:02

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Определить тип объекта

Проверять объект на его тип - плохой стиль в питоне.



Офлайн

#6 Авг. 5, 2011 10:10:22

DISKoRteS
От:
Зарегистрирован: 2011-07-21
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить тип объекта

Александр Кошелев
тогда что же “try” юзать ?



Отредактировано (Авг. 5, 2011 10:10:45)

Офлайн

#7 Авг. 5, 2011 10:13:16

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Определить тип объекта

DISKoRteS
тогда что же “try” юзать ?
Это зависит от. Но в большинстве случаев вообще реально обойтись без проверок, а где нет, там действительно можно обрабатывать исключения.



Офлайн

#8 Авг. 5, 2011 14:28:32

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить тип объекта

Было дело и на делфе писал. Скажите вы узнали об этом из желания получить тип объекта, или именации имён которые мне удобно давать Классам?
А насчёт надобности.
Как вы посоветуеле сделать допустим простую задачу такого типа:

class TUserlist:
def __init__(self):
list_=[]
def add(self):
if isinstance(user, TUser):
list_.add(user)
else: raise TypeError,'user must be TUser'
Может и действительно плохой тон определять тип переменных, но как хорошим тоном сделать подобный функционал?



Офлайн

#9 Авг. 5, 2011 15:03:17

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Определить тип объекта

Как раз в этом случае определять тип может оказаться не очень хорошим тоном.
Если вы копите TUserlist то вас интересует вполне определенная функциональность TUser.
Она конечно может определяться базовым классом, но не обязательно.
см http://hlabs.spb.ru/development/zope/interface_description.html
http://docs.zope.org/zope.interface/human.ru.html
Если коротко - будет хорошо если TUserlist будет требовать от TUser только то что ему действительно надо. Если у вас так - то все хорошо, если нет-то можно использовать интерфейс (вместо наследования).



Офлайн

#10 Авг. 5, 2011 15:35:52

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Определить тип объекта

Alex_Kutsan
Может и действительно плохой тон определять тип переменных, но как хорошим тоном сделать подобный функционал?
class Userlist(object):
def __init__(self):
self.list_=[]
def add(self, user):
self.list_.add(user)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version