如何在Python中使用__init__方法?

How to use __init__ method in Python?

我正在为十六进制值创建一个十六进制 class。 __init__ 方法需要一个十六进制字符串,但我希望能够从十进制整数创建一个十六进制实例,因此我为此创建了一个方法。代码如下:

class Hex:

    def __init__(self, val):
        #val should be a hex string
        self.val = val

    def from_dec(self, x):
        self.__init__(self, hex(x))

然而,当我运行:

a = Hex.from_dec(20)
print a.val

我收到以下错误:

TypeError: unbound method from_dec() must be called with Hex instance 
as first argument (got int instance instead)

如何正确使用__init__

您的方法 from_dec 的第一个参数是 self,这意味着需要 class Hex 的对象。

我会在 class 之外创建一个方法来从十进制输入创建十六进制对象。

def from_dec(x):
    return Hex(hex(x))

class Hex:

    def __init__(self, val):
        #val should be a hex string
        self.val = val

或者改变构造函数的输入参数。

class Hex:

    def __init__(self, val, dec=False):
        #val should be a hex string, unless dec=True
        if dec:
            self.val = hex(val)
        else:
            self.val = val

h = Hex(20, dec=True)

一种相当惯用的方法是使 from_dec 成为类方法:

class Hex:

    def __init__(self, val):
        #val should be a hex string
        self.val = val

    @classmethod
    def from_int(cls, x):
        return(Hex(hex(x)))

print Hex('0xab').val
print Hex.from_int(99).val

调用 class' 函数时不包含第一个参数(请阅读 python 文档,了解 classes!)。

这将正常工作:

def from_dec(self, x):
    self.__init__(hex(x))

不过,最好分配给变量,而不是使用init,应该运行只在对象初始化时使用。

def from_dec(self, x):
    self.val = hex(self.val)