我正在尝试使用机器人发送Facebook消息。这是我到目前为止的代码。
import fbchat
from fbchat import Client
from fbchat import models
client = Client('my_facebook_username', 'my_facebook_password')
Client.send(message='a', thread_id='tom.dry.18',
thread_type=models.ThreadType.USER)
这是我收到的错误消息:
Client.send(message='a', thread_id='tom.dry.18',
thread_type=models.ThreadType.USER)
TypeError: send() missing 1 required positional argument: 'self'
我该怎么办?
答案 0 :(得分:0)
python是区分大小写的
Client.send(message='a', thread_id='tom.dry.18', thread_type=models.ThreadType.USER)
应该是
client.send(message='a', thread_id='tom.dry.18', thread_type=models.ThreadType.USER)
不是非常技术性的详细说明:
应该从客户端实例而不是客户端类调用实例方法send
。
考虑以下示例
class Foo(object):
def __init__(self, name):
self.name = name
def bar(self, greeting):
print('{} {}!'.format(greeting, self.name))
foo = Foo(name='foo')
foo.bar(greeting='hello')
# prints
hello foo!
Foo.bar(greeting=hello') # this is analogous to your bug
# outputs error traceback
TypeError Traceback (most recent call last)
<ipython-input-9-23d058707a46> in <module>()
----> 1 Foo.bar(greeting='hello')
TypeError: bar() missing 1 required positional argument: 'self'
实例方法中的第一个参数接受一个实例,当从实例调用时,会隐式传递该实例。
例如,在上述玩具问候语申请中
Foo.bar(foo, greeting='hello')
# correctly prints out
hello foo!
当您撰写foo.bar(greeting='hello')
时,它等同于Foo.bar(foo, greeting='hello')
第一个参数不必被称为self
,尽管这是python中应该遵循的约定。
考虑:
class Foobar(object):
def __init__(this, name):
this.name = name
def bar(me, greeting):
print('{} {}!'.format(greeting, me.name))
foobar = Foobar('foobar')
foobar.bar(greeting='hello')
# prints
hello foobar
Foobar.bar(foobar, greeting='hello')
# also prints
hello foobar
要避免上述拼写错误,请避免使用仅大小写不同的名称
可能会考虑fb_client
而不是client
作为Client
实例的名称
可能会在整个代码库中强制执行规则,即实例名称不应影响其类名,即foo=Foo('foo')
应视为错误