Python: 调用自身函数无法正常工作

Python: call to self function not working correctly

这似乎是一个非常简单的问题,虽然我有解决方法,但我想很好地解决它。

编辑:我使用的是 Django 系统,所以 groups 变量实际上是来自数据库的 inherited/retrieved)我只是想做一个最小的例子,但我意识到这不利于解决我的问题

我有一个 class:

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()

其中Inviteresource_object,抛出这个错误:

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

我目前的解决方法是

resource_group_objects = resource_object.get_associated_groups(resource_object)

为什么 self 调用不是隐式的?

where Invite is the resource_object, this error is thrown:

这里的Invite就是class,它应该是 class 实例 .

也就是说,你应该通过 "instance of the Ivaite model/class" 而不是 Invite class

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

参考
1. Python calling method in class


示例

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']