如何在Python中使用__init__方法?

时间:2015-01-14 08:53:24

标签: python class

我正在为十六进制值创建一个十六进制类。 __init__方法期望十六进制字符串,但我希望能够从十进制的整数创建一个Hex实例,所以我为它创建了一个方法。代码如下:

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__

3 个答案:

答案 0 :(得分:2)

方法from_dec的第一个参数是self,这意味着期望类Hex的对象。

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

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)

答案 1 :(得分:2)

一种相当惯用的方法是使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

答案 2 :(得分:0)

当调用类'函数时,不要包含第一个参数(阅读关于类的python doc。)。

这将正常运作:

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

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

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