使用boto2,我可以写一个扩展的类。 说S3,有一些自定义功能但仍允许我使用任何内置功能。 类似的东西:
class MyS3(S3Connection):
def bucket_exists(self, bucket_name):
. . .
s3_connection = MyS3()
s3_connection.create_bucket('mybucket') # built-in function
s3_connection.bucket_exists('mybucket') # custom
但是,在boto3中,所有资源/客户端类都是在运行时生成的,因此我无法直接继承。
我在extending boto3找到了文档,但我不知道,如何将其子类化?
答案 0 :(得分:0)
是的,是的。你不能直接扩展任何类,而是你可以注入你的类函数,最终会以层次顺序调用,首先是大孩子,然后是孩子,然后是父母。
ParentA
- > 。ChildA
- >GrandChildA
因此,如果您创建GrandChildA的对象,则会调用GrandChildA的第一个函数。
general
- >general.specific
- >general.specific.more_specific
类似地,在先调用的层次结构general.specific.more_specific
中,然后是general.specific
,然后是general
。
并且该函数可以修改传递给该函数的关键字参数或返回一个值,该值将成为执行序列。
回到你的S3例子,它将变成类似的东西,
import boto3
s3 = boto3.resource('s3')
s3.create_bucket(Bucket='mybucket')
如果你总是希望将你的桶名默认为我的桶,你可以这样做,
import boto3
s3 = boto3.client('s3')
event_system = s3.meta.events
def add_my_bucket(params, **kwargs):
if 'Bucket' not in params:
params['Bucket'] = 'mybucket'