LINUX.ORG.RU

def get_len(arg):
    try:
        return len(arg)
    except Exception, why:
        return why

в ответ получаешь число если аргумент нужного типа или строку, что аргумент левый
a чем тебя type не устраивает??

anonymous
()
Ответ на: комментарий от anonymous

>def get_len(arg):
>    try:
>        return len(arg)
>    except Exception, why:
>        return why

:)

class Simple:pass
get_len(Simple())
<exceptions.AttributeError instance at 0xb7f2a48c>

anonymous
()
Ответ на: комментарий от anonymous

> class Simple:pass
> get_len(Simple())

>>> class Mislead :
...   def __len__( self ) :
...     return 1
... 
>>> m = Mislead()
>>> len(m)
1
>>> m[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: Mislead instance has no attribute '__getitem__'
>>> hasattr( m, "__len__" )
True
>>> hasattr( m, "__getitem__" )
False
>>> 

Так что, не извращайтесь с грязными хаками --- они всё равно будут глючить.

watashiwa_daredeska ★★★★
()

> Как наиболее эффективно определить, что данная переменная простого типа, потому что использую len() и для нее:

А что значит простой тип? Экземпляр класса вряд ли можно назвать простым, а len выдаст исключение. Может быть следует изменить постановку задачи?

DKorolkov
()

Думаю вы хотели этого: if hasattr(var, "__len__"): len(var)

anonymous
()
Ответ на: комментарий от DKorolkov

Для моего класса buffer в методе Append() можно принимать параметры любого типа: целые, строки, списки и т.д. На выходе получается линейный массив.

Если аргумент список ("сложный тип", как я его ранее назвал), то в иттерации я продолжаю разбирать его дальше. Но судил о типе я на основе функции type, что считаю не совсем эффективным.

Что говорить - вот мой метод:

    def append( self, BufferableObject ):
        boType = str(type(BufferableObject))
        if boType != "<type 'int'>":
            for i in BufferableObject:
                boType = str(type(BufferableObject))
                if boType != "<type 'int'>":
                    self.append(i) # вызов метода
                else:
                    self.__buf_.append(i) # вызов функции
        else:
            self.__buf_.append(BufferableObject)
        return

gtyrin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.