Python: вызов функции self не работает правильно - PullRequest
1 голос
/ 24 апреля 2019

Это кажется очень простой проблемой, и хотя у меня есть обходной путь, я бы хотел это исправить.

РЕДАКТИРОВАТЬ: я использую систему Django, поэтому переменная groups на самом деле наследуется / извлекается из БД) Я просто попытался сделать минимальный пример, но я понял, что это не способствует решению моей проблемы

У меня есть класс:

class Invite(models.Model, IndexedModelMixin):

    def get_associated_groups(self):
        return self.groups

Но когда я звоню get_associated_groups в другом месте

def get_groups(resource_object):
    resource_group_objects = resource_object.get_associated_groups()

, где Invite - это resource_object, выдается эта ошибка:

get_associated_groups() missing 1 required positional argument: 'self'

Мой обходной путь в настоящее время

resource_group_objects = resource_object.get_associated_groups(resource_object)

Почему самозвонок неявный?

1 Ответ

4 голосов
/ 24 апреля 2019

, где Пригласить - это resource_object, выдается эта ошибка:

Здесь Invite - это класс , это должен быть экземпляр класса .

То есть вы должны передать "экземпляр Ivaite модель / класс"вместо Invite класса

invite_instance = Invite.objects.get(id=1)
get_groups(invite_instance) # calling the function

Ссылка
1. Python, вызывающий метод в классе


Пример

In [3]: class Foo: 
   ...:     names = ["Tony", "George"] 
   ...:  
   ...:     def get_names(self): 
   ...:         return self.names 
   ...:  
   ...:  
   ...: def retrieve_names(foo_instance): 
   ...:     return foo_instance.get_names()                                                                                                                                                                        

In [4]:                                                                                                                                                                                                            

In [4]: retrieve_names(Foo)                                                                                                                                                                                        
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-3eb7dbe1c600> in <module>
----> 1 retrieve_names(Foo)

<ipython-input-3-dbb19979fd85> in retrieve_names(foo_instance)
      7 
      8 def retrieve_names(foo_instance):
----> 9     return foo_instance.get_names()

TypeError: get_names() missing 1 required positional argument: 'self'

In [5]:                                                                                                                                                                                                            

In [5]: foo_inst = Foo()                                                                                                                                                                                           

In [6]: retrieve_names(foo_inst)                                                                                                                                                                                   
Out[6]: ['Tony', 'George']
...