首页 > 解决方案 > 以 Stripe 的方式实例化 Python 类

问题描述

我想知道,我有一个随机的愿望,想了解 Stripe 如何以如此简洁的方式实例化它的类:

例如,

from __future__ import absolute_import, division, print_function

import os

import stripe


stripe.api_key = os.environ.get("STRIPE_SECRET_KEY")

print("Attempting charge...")

resp = stripe.Charge.create(
    amount=200,
    currency="usd",
    card="tok_visa",
    description="customer@gmail.com",
)

print("Success: %r" % (resp))

我正在以类似的类继承方式工作,但是,我只能使以下工作:

resp = myexamplepackage.Quantity().list()

即,我必须先调用 Quantity 类,Quantity()然后才能使用类方法...

我的Quantity()课看起来像这样:

class Quantity(
    APIClient,
    ListAPIMixin
):

    OBJECT_NAME = "Quantity"

    def __init__(
        self,
        *args,
        **kwargs
    ):
        super(Quantity, self).__init__()

    def list(self, *args, **kwargs):
        return super(Quantity, self).list(
            path='{}/{}'.format(self.realm, self.resource)
        )

注意list()调用被传递到 ListAPIMixin 类,但我不确定这在这里是否重要。

我在init () 调用中玩弄了许多方法,但如果没有一些额外的繁重工作,我不确定这是可能的:

    def __init__(
        self,
        *args,
        **kwargs
    ):
        super(Quantity, self).__init__()
        self()
    def __init__(
        self,
        *args,
        **kwargs
    ):
        super(Quantity, self)()

但似乎没有什么能像条带似乎能够实现的那样工作。

标签: pythonpython-3.x

解决方案


stripe.Charge从 继承其create功能stripe.api_resources.abstract.creatable_api_resource.CreateableAPIResource,并在那里用@classmethod. 这个装饰器允许在没有类的现有实例的情况下调用被装饰的方法,而是调用类对象本身。可以在StackAbuse中找到一个很好的示例解释。


推荐阅读