【问题标题】:Python: call to self function not working correctlyPython:调用 self 函数无法正常工作
【发布时间】:2019-09-13 11:16:57
【问题描述】:

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

编辑:我使用的是 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()

其中Inviteresource_object,抛出此错误:

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

我目前的解决方法是

resource_group_objects = resource_object.get_associated_groups(resource_object)

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

【问题讨论】:

  • def __init__(self): self.groups = ... w3schools.com/python/python_classes.asp
  • @DeepSpace 我编辑了这个问题,但也许它仍然是同一个问题?我真的不能在 Django 中使用__init__
  • 很可能resource_object 不是Invite 的实例,而是对Invite 类本身的引用。请执行print(type(resource_object)) 并验证您实例化resource_object 的方式

标签: python django self


【解决方案1】:

其中Invite是resource_object,会抛出这个错误:

这里Invite,应该是类实例 strong>.

也就是说,您应该传递“Ivaite 模型/类的实例”而不是 Invite

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-05
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多