在python中,int
类型有一个方法,即int.from_bytes
。它不是特定int的方法,而是类型上的方法。 E.g。
>>> int.from_bytes(b'\xee\xff',"big")
61183
>>> int.from_bytes
<built-in method from_bytes of type object at 0x107fdb388>
我如何定义这样的东西?假设定义了一个名为“point”的类,我该如何定义像
这样的东西>>> point.from_coordinates(3,5)
<__main__.point object at 0x10c0c9310>
>>> point.from_keys(b'\x12\x3e')
<__main__.point object at 0x10bed5890>
? (假设通过某种不同的方法初始化点。)
答案 0 :(得分:6)
你想要classmethod
,它通常用作装饰者:
class point(object):
@classmethod
def from_coordinates(cls, x, y):
pt = cls()
pt.x, pt.y = x, y
return pt
这有时被称为“替代构造函数”成语。如果有多种不同的方法来构建您的类型,而不是将它们全部放入一个带有大量可选参数或变量的__init__
方法中,请将它们全部放入单独的classmethod
中。
答案 1 :(得分:3)
您可以使用classmethod
,例如init
期望整数的模拟示例,但也提供方便from_hex
尝试获取字符串并将其转换为整数。
class MyClass(object):
def __init__(self, a, b):
self.a = a
self.b = b
@classmethod
def from_hex(cls, a, b):
return cls(int(a, 16), int(b, 16))
from_hex
知道与之关联的是哪个类,因此通过调用cls(...)
,您就可以构建MyClass
类型,就好像您已编写MyClass(a, b)
一样自己有效整数。