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

h__*_*h__ 2 python methods class python-3.x

在python中有一种类型的方法int,即int.from_bytes.它不是特定int的方法,而是类型上的方法.例如

>>> int.from_bytes(b'\xee\xff',"big")
61183

>>> int.from_bytes
<built-in method from_bytes of type object at 0x107fdb388>
Run Code Online (Sandbox Code Playgroud)

我该如何定义这样的东西?假设定义了一个名为"point"的类,我该如何定义类似的东西

>>> point.from_coordinates(3,5)
<__main__.point object at 0x10c0c9310>

>>> point.from_keys(b'\x12\x3e')
<__main__.point object at 0x10bed5890>
Run Code Online (Sandbox Code Playgroud)

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

aba*_*ert 6

你想要的classmethod,通常用作装饰者:

class point(object):
    @classmethod
    def from_coordinates(cls, x, y):
        pt = cls()
        pt.x, pt.y = x, y
        return pt
Run Code Online (Sandbox Code Playgroud)

这有时被称为"替代构造函数"成语.如果有多种不同的方法来构造您的类型,而不是将它们全部放入一个__init__带有大量可选参数或变量的方法中,请将它们全部放入单独的classmethods中.