Форум сайта python.su
есть функция
def add(self,user):
Хочу чтоб user был только типа TUser, точнее был экземпляром класса TUser.
Как это проверить? может есть какойто .ClassName?
Или самому вводить подобную переменную в свой класс TUser.
Но не хотелось бы чтоб программа падала если сообщить не правильную переменную в которой не будет моей ClassName
type(User) даёт
<type ‘instance’>
Офлайн
isinstance(user, TUser)
Офлайн
Андрей СветловБольшое спасибо. то что нужно.
Офлайн
Alex_Kutsan, вы тоже на Delphi писали?
Офлайн
Проверять объект на его тип - плохой стиль в питоне.
Офлайн
Александр Кошелевтогда что же “try” юзать ?
Отредактировано (Авг. 5, 2011 10:10:45)
Офлайн
DISKoRteSЭто зависит от. Но в большинстве случаев вообще реально обойтись без проверок, а где нет, там действительно можно обрабатывать исключения.
тогда что же “try” юзать ?
Офлайн
Было дело и на делфе писал. Скажите вы узнали об этом из желания получить тип объекта, или именации имён которые мне удобно давать Классам?
А насчёт надобности.
Как вы посоветуеле сделать допустим простую задачу такого типа:
class TUserlist:
def __init__(self):
list_=[]
def add(self):
if isinstance(user, TUser):
list_.add(user)
else: raise TypeError,'user must be TUser'
Офлайн
Как раз в этом случае определять тип может оказаться не очень хорошим тоном.
Если вы копите TUserlist то вас интересует вполне определенная функциональность TUser.
Она конечно может определяться базовым классом, но не обязательно.
см http://hlabs.spb.ru/development/zope/interface_description.html
http://docs.zope.org/zope.interface/human.ru.html
Если коротко - будет хорошо если TUserlist будет требовать от TUser только то что ему действительно надо. Если у вас так - то все хорошо, если нет-то можно использовать интерфейс (вместо наследования).
Офлайн
Alex_Kutsan
Может и действительно плохой тон определять тип переменных, но как хорошим тоном сделать подобный функционал?
class Userlist(object):
def __init__(self):
self.list_=[]
def add(self, user):
self.list_.add(user)
Офлайн