如何在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)
我正在为十六进制值创建一个十六进制 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)