Как различать функцию и метод класса?

Если я правильно понимаю, вы хотите все ожидающие транзакции.

Для этого начнем со списка дат. Тогда cross apply или join:

with dates as 
      select convert(date, '2019-01-01') as dte
      union all
      select dateadd(day, 1, dte)
      from dates
      where dte < '2019-02-28'
     )
select t.customer, d.dte as tr_date, t.charge_date,
       t.payment as expected_chart_amount
from dates d join
     transactions t
     on d.dte >= t.orig_date and
        d.dte <= t.charge_date
where t.customer = 100400
order by d.dte, t.charge_date;
6
задан hexchain 20 December 2016 в 15:26
поделиться

3 ответа

Повторно подчеркнуть точку который J.F. Sebastian сослался на, я хочу смочь отличить его, когда функция объявляется в классе (когда тип, который я получаю, является функцией и не связанным или несвязанным методом). т.е. где первый вызов к get_info(__init__) происходит я хотел бы смочь обнаружить, что это - метод, объявляемый как часть класса.

Этот вопрос подошел, так как я помещаю декоратора вокруг этого, и это получает дескриптор к функции init, и я не могу на самом деле выяснить, объявляется ли метод в классе или как одинокая функция

Вы не можете. J.F. Ответ Sebastian на все еще 100% применим. Когда орган по определению класса выполняется, сам класс еще не существует. Операторы ( __init__ функциональное определение, и get_info(__init__) звоните), происходят в новом локальном пространстве имен; в то время вызов к get_info происходит, __init__ ссылка на функцию в том пространстве имен, которое неотличимо от функции, определяемой за пределами класса.

4
ответ дан 8 December 2019 в 04:31
поделиться

Можно различать два путем проверки типа:

>>> type(bar)
<type 'function'>
>>> type(Foo.__init__)
<type 'instancemethod'>

или

>>> import types
>>> isinstance(bar, types.FunctionType)
True
>>> isinstance(bar, types.UnboundMethodType)
True

который является путем, Вы выполнили бы в нем if оператор.

Кроме того, можно получить класс от im_class атрибут метода:

>>> Foo.__init__.im_class
__main__.Foo
12
ответ дан 8 December 2019 в 04:31
поделиться

В то время, когда Вы звоните get_info(__init__) (в определении класса) __init__ обычная функция.

def get_info(function_or_method):
    print function_or_method

class Foo(object):
    def __init__(self):
        pass
    get_info(__init__)   # function

def bar():
    pass

get_info(Foo.__init__)   # unbound method
get_info(Foo().__init__) # bound method
get_info(bar)            # function

Вывод (CPython, IronPython):

<function __init__ at ...>
<unbound method Foo.__init__>
<bound method Foo.__init__ of <__main__.Foo object at ...>>
<function bar at ...>

Вывод (Jython):

<function __init__ 1>
<unbound method Foo.__init__>
<method Foo.__init__ of Foo instance 2>
<function bar 3>
9
ответ дан 8 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

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