Как идентифицировать абстрактных участников через отражение

def chunks(iterable,n):
    """assumes n is an integer>0
    """
    iterable=iter(iterable)
    while True:
        result=[]
        for i in range(n):
            try:
                a=next(iterable)
            except StopIteration:
                break
            else:
                result.append(a)
        if result:
            yield result
        else:
            break

g1=(i*i for i in range(10))
g2=chunks(g1,3)
print g2
'<generator object chunks at 0x0337B9B8>'
print list(g2)
'[[0, 1, 4], [9, 16, 25], [36, 49, 64], [81]]'
5
задан tanascius 22 June 2009 в 06:58
поделиться

2 ответа

Свойство на самом деле является своего рода «синтаксическим сахаром» и реализуется двумя методами: методом получения и методом установки.

Итак, я думаю, что вы сможете определить, свойство является абстрактным, проверяя, являются ли геттер и / или сеттер абстрактными, например:

PropertyInfo pi = ...

if( pi.GetSetMethod().IsAbstract )
{
}

И, AFAIK, поле не может быть абстрактным. ;)

12
ответ дан 18 December 2019 в 14:50
поделиться

Во-первых: поля не могут быть абстрактными, поскольку все, что для них есть, - это само поле.

Затем мы отмечаем, что свойства (в широком смысле!) На самом деле get_ / set_ методы под капотом.

Затем мы проверяем, что имеет свойство IsAbstract , и видим, что MethodBase (и так MethodInfo ]).

Наконец, мы вспоминаем / знаем / выясняем, что PropertyInfo имеет методы GetGetMethod () и GetSetMethod () , возвращающие MethodInfo , и мы закончили, за исключением заполнения беспорядочных деталей о наследовании и так далее.

1
ответ дан 18 December 2019 в 14:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: