b = 123
                  
                  
                  
                  
                  
                  на самом деле вызывает метакласс type
                  
                  
                  
                  
                  
                  A = type("A", (), {"b": 123})
                  
                  
                  
                  
                  
                  Однако, 
                  
                  
                  def smth(smth_arg):
                  
                  
                      print(smth_arg)
                  
                  
                  
                  
                  
                  class A(object):
                  
                  
                      maybe_method = smth
                  
                  
                      
                  
                  
                  a = A()
                  
                  
                  a.maybe_method("123")
                  
                  
                  # prints 123
                  
                  
                  Тогда как метакласс type отличает аттрибут-функцию от аттрибута-метода?
                  
                  
                  Где вообще почитать, как именно происходит в питоне превращение функции в метод, связывание со ссылкой на экземпляр?
                  
                  
                
>>> a.maybe_method("123") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: smth() takes 1 positional argument but 2 were given
Обсуждают сегодня