Эта функция требует метод класса? - PullRequest
0 голосов
/ 22 мая 2018
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-адреса мне придется использовать метод класса, статический метод или реферат?Я предполагаю, что для баланса счета я бы использовал абстрактный, так как личные идентификаторы менялись бы от экземпляра к экземпляру.gen_nonce() будет статическим, поскольку не требует использования каких-либо переменных класса или экземпляра.Однако для получения верхних комментариев я бы использовал метод класса, потому что он использует переменную класса url, или абстрактный метод, потому что не каждый экземпляр будет вызывать его одновременно?

1 Ответ

0 голосов
/ 22 мая 2018

Вы на правильном пути.Во-первых, абстрактные методы можно найти только в абстрактных базовых классах.Если вы намереваетесь создать экземпляр класса, вы можете его игнорировать.

Большинство методов будут методами экземпляра;вот почему вам не нужно их украшать.

Метод класса - фактически альтернативный конструктор.Если вы чувствуете необходимость в нескольких __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

Статический метод isnэто вообще не метод.Это просто обычная функция, которую вы помещаете в класс, чтобы не загрязнять глобальное пространство имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...