缺少1个必需的位置参数:odoo中的“self”?

2024-05-21 00:53:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个函数来发送一条消息给一个特定的用户,在我的模型中我写了这段代码

class SkypeBot(models.Model):
    _name = 'my.skype'
    _inherit = ['mail.thread', 'mail.activity', 'res.users']
    _description = 'My Skype'


    skype_login = fields.Char('Your skype Login')
    skype_password = fields.Char('Your skype password')
    skype_message = fields.Char(store=True)

    @api.multi
    def msg(self, message):

        partner_id = self.env['res.users'].search([('id', '=', 2)]).partner_id.id

        _logger.info('^^^^^' * 5)
        _logger.warning(partner_id)
        _logger.info('^^^^^' * 5)

        self.env['mail.message'].create({'message_type': 'notification',
                                         'subtype': self.env.ref('mail.mt_comment').id,  # subject type
                                         'body': message,
                                         'subject': 'Message subject',
                                         'partner_ids': [(4, partner_id), ],
                                         # partner to whom you send notification
                                         })

我想从另一个MySkype类调用此方法(msg):

^{pr2}$

但是当这个方法被调用时,我得到了一个错误

лют 10 10:42:00 PK odoo12[8534]: 2019-02-10 07:42:00,618 8534 INFO ? odoo.addons.bus.models.bus: Bus.loop listen imbus on db postgres
лют 10 10:42:50 PK odoo12[8534]: 2019-02-10 07:42:50,620 8534 INFO odoo12 werkzeug: 127.0.0.1 - - [10/Feb/2019 07:42:50] "POST /longpolling/poll HTTP/1.1" 200 - 35 0.030 53.925
лют 10 10:42:55 PK odoo12[8534]: 2019-02-10 07:42:55,056 8534 INFO ? odoo.addons.skype_bot.skype_send_message: —--------------------------------------
лют 10 10:42:55 PK odoo12[8534]: 2019-02-10 07:42:55,056 8534 WARNING ? odoo.addons.skype_bot.skype_send_message: [SkypeNewMessageEvent]
лют 10 10:42:55 PK odoo12[8534]: Id: 1014
лют 10 10:42:55 PK odoo12[8534]: Type: NewMessage
лют 10 10:42:55 PK odoo12[8534]: Time: 2019-02-10 07:42:54
лют 10 10:42:55 PK odoo12[8534]: MsgId: 1549784574906
лют 10 10:42:55 PK odoo12[8534]: 2019-02-10 07:42:55,057 8534 INFO ? odoo.addons.skype_bot.skype_send_message: —--------------------------------------
лют 10 10:42:55 PK odoo12[8534]: 2019-02-10 07:42:55,057 8534 WARNING ? odoo.addons.skype_bot.skype_send_message: Test!Test!Test!Test!Test!
лют 10 10:42:55 PK odoo12[8534]: 2019-02-10 07:42:55,057 8534 INFO ? odoo.addons.skype_bot.skype_send_message: —--------------------------------------
лют 10 10:43:40 PK odoo12[8534]: Exception in thread Thread-2:
лют 10 10:43:40 PK odoo12[8534]: Traceback (most recent call last):
лют 10 10:43:40 PK odoo12[8534]: File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
лют 10 10:43:40 PK odoo12[8534]: self.run()
лют 10 10:43:40 PK odoo12[8534]: File "/usr/lib/python3.6/threading.py", line 864, in run
лют 10 10:43:40 PK odoo12[8534]: self._target(*self._args, **self._kwargs)
лют 10 10:43:40 PK odoo12[8534]: File "/opt/odoo12/odoo-venv/lib/python3.6/site-packages/skpy/main.py", line 207, in loop
лют 10 10:43:40 PK odoo12[8534]: self.cycle()
лют 10 10:43:40 PK odoo12[8534]: File "/opt/odoo12/odoo-venv/lib/python3.6/site-packages/skpy/main.py", line 196, in cycle
лют 10 10:43:40 PK odoo12[8534]: self.onEvent(event)
лют 10 10:43:40 PK odoo12[8534]: File "/opt/odoo12/odoo-custom-addons/skype_bot/skype_send_message.py", line 33, in onEvent
лют 10 10:43:40 PK odoo12[8534]: skype_model.SkypeBot.msg(message=message)
лют 10 10:43:40 PK odoo12[8534]: TypeError: msg() missing 1 required positional argument: 'self'
лют 10 10:43:40 PK odoo12[8534]: 2019-02-10 07:43:40,702 8534 INFO odoo12 werkzeug: 127.0.0.1 - - [10/Feb/2019 07:43:40] "POST /longpolling/poll HTTP/1.1" 200 - 8 0.003 50.051

我做错了什么?我该如何解决这个问题

我试着用@api.型号这对我没有帮助。 似乎我对odoo环境的初始化有问题,但我可以确切地知道在哪里


Tags: inodootestselfinfosendidmessage
1条回答
网友
1楼 · 发布于 2024-05-21 00:53:15

正如@TigerhawkT3所提到的,调用该方法就像它是一个静态方法,而不是一个类方法。在

In Python, the first argument of every class method (including init) is always a reference to the current instance of the class. By convention, this argument is always named self.¹

为了正确调用此方法,您需要创建类SkypeBot的实例,然后调用msg()

sbot = SkypeBot()
sbot.msg(message)

有关将self作为参数显式声明的语言设计决策的更多信息,请参阅this Stack Overflow post和{a2}撰写的这篇文章。在

相关问题 更多 >