我想要一个具有如下接口(interface)的 Python 类:
import myclass
client = myclass.Client("user", "password")
client.users.create("user1")
client.posts.create("user1", "Hello, World!")
请注意,我想使用两个点来指定方法,而不仅仅是 create_user 或 create_post:users.create/ posts.create
我希望这个特定的界面模仿我正在尝试使用的 HTTP API(它有像“/api/users/create”和“/api/posts/create”这样的端点)
如果我在 myclass.py 中定义我的类如下:
class Client(object):
def __init__(self, user, pass):
self.user = user
self.pass = pass
那么如何创建这些点命名空间的方法呢?我的第一个想法是像这样创建子类:
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
但是,如果我这样做,那么我会遇到两个问题之一(一个严重,另一个只是哲学/意识形态)
- 如果
ClientUserAPI扩展“Client”,则__init__方法会创建一个无限循环 - 如果
ClientUserAPI扩展了“object”,那么它将无法直接访问self.user和self.pass变量。这意味着我必须在两个助手类上创建__init__方法,它们除了分配self.user和self.pass外什么都不做。这不仅在代码上是多余的,而且在内存上也是多余的
有没有更好的解决方案?
请您参考如下方法:
class Client:
def __init__(self):
self.users = ClientUserAPI(self)
self.posts = ClientPostAPI(self)
class ClientUserAPI:
def __init__(self, client):
self.client = client
class ClientPostAPI:
def __init__(self, client):
self.client = client
