如何在Python类中“命名空间”方法

2024-09-30 14:36:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个Python中的类,其接口如下:

import myclass

client = myclass.Client("user", "password")

client.users.create("user1")
client.posts.create("user1", "Hello, World!")

注意,我不想仅仅使用create_usercreate_post,而是使用两个点指定方法:users.create/posts.create

我希望这个特定的接口模仿我尝试使用的httpapi(它有诸如“/API/users/create”和“/API/posts/create”这样的端点)

如果我在myclass.py中定义我的类:

^{pr2}$

那么如何创建这些点名称空间的方法呢?我的第一个想法是创建这样的子类:

class Client(object):
    def __init__(self, user, pass):
        self.user = user
        self.pass = pass
        self.users = ClientUserAPI()
        self.posts = ClientPostAPI()

class ClientUserAPI(object):
    def create(self):
        # Do some cURL magic

class ClientPostAPI(object):
    def create(self):
        # Do some cURL magic

然而,如果我这样做,我会遇到两个问题中的一个(一个很严重,另一个只是哲学/意识形态)

  1. 如果ClientUserAPI扩展了“Client”,那么__init__方法将创建一个无限循环
  2. 如果ClientUserAPI扩展了“object”,那么它就不能直接访问self.user和{}变量。{{cd7}和

有更好的解决办法吗?在


Tags: 方法selfclientobjectdefcreatemyclasspass