如何在Python中定义类似int.from_bytes()的方法?

时间:2013-06-24 20:24:30

标签: python class methods python-3.x

在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>

? (假设通过某种不同的方法初始化点。)

2 个答案:

答案 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)一样自己有效整数。