【问题标题】:Python call class property from same classmethodPython从相同的类方法调用类属性
【发布时间】:2021-04-04 11:08:14
【问题描述】:

我有类方法wait_for_operation,我想从中调用类属性并生成一个我想与类方法一起使用的新客户端。

def get_new_bearer_token():
    return "new_token"

class MyClass(object):
    def __init__(self, json):
        self.json = json

    @property
    def client(self):
        k8_loader = kube_config.KubeConfigLoader(self.json)
        call_config = type.__call__(Configuration)
        k8_loader.load_and_set(call_config)
        Configuration.set_default(call_config)
        return client

    @classmethod
    def wait_for_operation(self, kube_config, cloud):
        while True:
                if cloud == "AWS":
                    kube_config['users'][0]['user']['token'] = get_new_bearer_token()
                    self.json = kube_config
                    #call class property to generate a new client with token and use it


if __name__ == '__main__':
    kube_config = {}
    my_client = MyClass(json=kube_config)
    my_client.client.CoreV1Api().list_namespace(watch=False)
    result = MyClass.wait_for_operation(kube_config=kube_config,cloud='AWS')

【问题讨论】:

    标签: python-3.x oop kubernetes


    【解决方案1】:

    使用改变状态或有副作用的属性是一个非常糟糕的主意。属性旨在表示实例数据的视图,这就是为什么我们不会真正说“调用属性”,而是“获取或设置属性”。

    我的建议 - 删除 @property 装饰器并将 client 变成普通方法。给它一个更好的名字,比如generate_new_client。然后像任何其他方法一样调用它 - self.generate_new_client()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多