我正在为十六进制值创建一个十六进制类。 __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__
?
答案 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)