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或抽象方法,因为不是每个实例都会同时调用它吗?
答案 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
静态方法根本不是一种方法。它只是一个常规函数,您可以将其放在类中以避免污染全局命名空间。