在python类中,如何将一个类的方法的返回值作为输入传递给同一类的另一个方法

In python class, how to pass returned value of a method of a class as input to another method of the same class

提问人:vpothurajula 提问时间:10/20/2023 最后编辑:vpothurajula 更新时间:10/20/2023 访问量:20

问:

我正在使用 boto3 库与 s3 兼容存储建立连接。我创建了一个带有构造函数的类,该构造函数将集群详细信息,访问密钥和ID作为输入,并启动了这些内容。现在创建了一个方法,用于将 S3 客户端打开到集群并返回 S3 客户端对象。想要在同一类的 diff 方法中使用它来列出存储桶:

class s3_boto3_methods():

    def __init__(self,host,port,user,accesskey,session_token = None):
        #self.host = host
        self.port = port
        self.host = host + ":" + str(self.port)
        self.user_key = user
        self.access_key = accesskey
        session_token = None

   def s3_Client_Connection(self):
        s3_client = boto3.client('s3',use_ssl=False,verify=False, aws_access_key_id=self.user_key,aws_secret_access_key=self.access_key,endpoint_url=self.host)
         return (s3_client)
   
   def listBuckets(self,client):
         response = client.list_buckets()['Buckets'] 
         print ("Buckets for user:",self.user_key)
         for item in response:
             print (item["Name"])

if __name__ == "__main__":
    instance=s3_boto3_methods("host","port","access_id","access_key")
    s3_client=instance.s3_Client_Connection()
    instance.listBuckets(s3_client)

在上面,该方法s3_Connect_Connection返回s3_client对象,我需要在 listBuckets 方法中使用这个。目前,我正在通过调用instance.s3_Client_Connection并将此返回的连接作为下一行中的参数传递来处理此问题。

欢迎可以改进此代码片段的建议。

另一个选项是在 listBuckets 中调用 s3_client_connection,因此每当调用列表存储桶时,它都会首先设置客户端连接:

    def listBuckets(self):
    s3_client=self.s3_Client_Connection()
    response = s3_client.list_buckets()['Buckets'] #here response is a list with dictionaries as list items in it.
    print ("Buckets for user:",self.user_key)
    for item in response:
        print (item["Name"])
python-3.x 静态方法 类方法 python 类

评论

0赞 Brian61354270 10/21/2023
在设计方面,这可能不应该是一个类。或者至少,它应该被分解,以有一个更明确的单一责任。
0赞 Brian61354270 10/21/2023
您有很多属性似乎只存在,以便稍后传递给 。这强烈表明了一个糟糕的抽象。 它试图既充当工厂,又充当 .对于后一个目的,它不需要知道这些值中的任何一个,它只需要有一个可以使用的实例。我建议重新设计您的类以接受其中的实例并将该对象存储为属性(另请参阅“依赖注入”)。boto3.clients3_boto3_methodsboto3.clientboto3.clientboto3.clientboto3.client__init__

答: 暂无答案