使用boto3作为基类

时间:2018-05-23 02:03:03

标签: python python-2.7 boto3 botocore

使用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找到了文档,但我不知道,如何将其子类化?

1 个答案:

答案 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'