【发布时间】:2018-05-22 19:58:17
【问题描述】:
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() 将是静态的,因为它不需要使用任何类或实例变量。但是,为了检索顶级 cmets,我会使用类方法,因为它使用类变量 url,还是使用抽象方法,因为不是每个实例都会同时调用它?
【问题讨论】:
-
注意:不需要将其设为
staticmethod。 FWIW:我基本上从不使用@staticmethod。现在,您的get_AccountBalance不需要需要@classmethod,但您确实需要使用self.AccountBalance来访问类属性。或Website.AccountBalance明确。如果您愿意,可以使用类方法。但这几乎从来没有必要。 -
你的
Website类总是有一个用户名和一个私有ID 作为数据。如果TopComments不需要数据,为什么它是类的一部分?我认为您确实需要两个类,一个用于为网站建模,另一个用于为网站的 用户 建模。
标签: python python-3.x oop