python-3.x - 对 __init__ 的使用感到困惑
问题描述
我创建了一个从 YouTube API 创建的类。它看起来像这样:
class YouTube:
def __init__(self,name,version,developerKey):
self.service=build(name, version, developerKey)
def get_video_info(self,vid_id):
vid_request = self.service.videos().list(
part = 'snippet,statistics',
id = vid_id,
fields = 'items(kind,id,statistics)')
vid_response = vid_request.execute()
return vid_response
if __name__ == "__main__":
name = 'youtube'
version = 'v3'
api_token='xxxx'
query=YouTube(name,version,api_token)
vid_id='YYYYY_VID_ID'
response = query.get_video_info(vid_id)
pprint(response)
它工作正常,但后来我在init方法上尝试了以下操作:
def __init__(self):
self.name = 'youtube'
self.version = 'v3'
self.developerKey = 'xxxxxxx'
self.service = build(self.name, self.version,self.developerKey)
if __name__ == "__main__":
query = YouTube()
response = query.get_video_info(vid_id)
pprint(response)
我收到以下错误:
def get_video_info(self,vid_id):
vid_request = self.service.videos().list(
part = 'snippet,statistics',
id=vid_id,
fields= 'items(kind,id,statistics)')
Exception has occurred: AttributeError 'str' object has no attribute 'request'
vid_response = vid_request.execute()
我在网上搜索,我看到这个异常发生在各种情况下,我感到很失落?有人可以指出我应该搜索的方向吗?
解决方案
根据此文档,这build
是定义函数的方式:
build(serviceName, version, http=None, discoveryServiceUrl=DISCOVERY_URI, developerKey=None, model=None, requestBuilder=HttpRequest, credentials=None, cache_discovery=True, cache=None, client_options=None, adc_cert_path=None, adc_key_path=None, num_retries=1)
构造一个用于与 API 交互的资源。
因此,您应该在第二个代码段中将开发人员密钥作为关键字参数传递:
self.service = build(
self.name,
self.version,
developerKey = self.developerKey
)
推荐阅读
- git - 嵌套 Git Ignore ,Git Kraken 将忽略的文件列为未暂存文件
- deployment - 我对 Kubernetes 证书管理器有疑问
- json - JSON.parse 中第 4 位的 JSON
- azure-ad-b2c - 在 Xamarin 上使用 MSAL 时是否可以在嵌入式 Web 视图上禁用 iOS 3D 触摸
- php - 查询在 sql server 上工作,不工作 php codeigniter
- javascript - 当检测到特定类时(滚动时)如何隐藏/显示 div?
- r - dBWriteTable 无法将 NULL 写入日期字段的 SQL Server 表
- c# - 当我使用当前名称的信号量时出现异常
- r - 在数据框上添加一列
- python - 使用正则表达式拆分但保留分隔符