How to use __init__ method in Python?
本问题已经有最佳答案,请猛点这里访问。
我正在为十六进制值创建十六进制类。
1 2 3 4 5 6 7 8 | 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)) |
但是,当我跑步时:
1 2 | a = Hex.from_dec(20) print a.val |
我得到以下错误:
1 2 | TypeError: unbound method from_dec() must be called with Hex instance as first argument (got int instance instead) |
如何正确使用
一种相当惯用的方法是使
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
方法
我将在类外部创建一个方法,从十进制输入创建十六进制对象。
1 2 3 4 5 6 7 8 | def from_dec(x): return Hex(hex(x)) class Hex: def __init__(self, val): #val should be a hex string self.val = val |
或者更改构造函数的输入参数。
1 2 3 4 5 6 7 8 9 10 | 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) |
当调用class'函数时,不要包含第一个参数(请阅读python文档中关于类的内容!).
这将正常工作:
1 2 | def from_dec(self, x): self.__init__(hex(x)) |
但是,最好分配给变量,而不是使用init,它只应在对象初始化期间运行。
1 2 | def from_dec(self, x): self.val = hex(self.val) |