这个函数需要一个类方法吗?

2024-05-15 14:25:51 发布

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

import json
from urllib.request import urlopen

class Website:
    def __init__(self, username, privateID):
        self.username = username
        self.privateID = privateID

    # URL's to query
    AccountBalance = 'https://website.com/private/AccountBalance?{0}?nonce={1}' # 0 requires private ID num

    TopComments = 'https://website.com/public/TopComments?nonce={0}'


    def get_AccountBalance(self):
        nonce = gen_nonce(8)
        print(json.load(urlopen(AccountBalance.format(self.privateID, nonce))))

    @staticmethod
    def gen_nonce(length):
        return ''.join([str(random.randint(0, 9)) for i in range(length)])

我仍然在试图理解什么时候使用不同类型的类方法,而且我一直在从事这个项目。我的类将有多个实例,但要查询的URL将始终保持不变,因此我将使URL成为类变量。然而,当实际从URL检索信息时,我必须使用类方法、静态方法还是抽象方法?我假设对于帐户余额,我将使用abstract,因为私有ID会随着实例的不同而变化。gen_nonce()将是静态的,因为它不需要使用任何类或实例变量。但是,为了检索最上面的注释,我会使用class方法,因为它使用类变量url,还是使用抽象方法,因为不是每个实例都会同时调用它


Tags: 实例方法httpsimportselfjsonurldef
1条回答
网友
1楼 · 发布于 2024-05-15 14:25:51

你在正确的轨道上。首先,抽象方法只存在于抽象基类中。如果你想实例化一个类,你可以忽略它们

大多数方法都是实例方法;所以你不需要装饰它们

类方法实际上是另一种构造函数。如果您觉得需要多个__init__方法,那么最基本的方法是__init__,其余的被定义为类方法,通常用__init__实现

class Foo:
    def __init__(self, x):
        self.x = x

    @classmethod
    def from_bar(cls, b):
        return cls(b.x)

f1 = Foo(3)
b = Bar()
f2 = Foo.from_bar(b)  # Create a Foo from a Bar without having to know how that actually happens

静态方法根本不是真正的方法。它只是一个常规函数,您可以将其放入类中以避免污染全局命名空间

相关问题 更多 >