这个函数是否需要类方法?

时间:2018-05-22 19:58:18

标签: python python-3.x oop

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中检索信息时,我是否必须使用类方法,静态方法或抽象?我假设对于帐户余额,我会使用摘要,因为私有ID会从一个实例更改为实例。 gen_nonce()将是静态的,因为它不需要使用任何类或实例变量。但是,为了检索顶部注释,我会使用类方法,因为它使用类变量url或抽象方法,因为不是每个实例都会同时调用它吗?

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上。首先,抽象方法只能在抽象基类中找到。如果您打算实例化一个类,则可以忽略它们。

大多数方法都是实例方法;这就是你不需要装饰它们的原因。

类方法实际上是另一种构造函数。如果您认为需要多个__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

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