如何使类在查找方法中表现得像super

时间:2017-07-17 06:26:05

标签: python

我一直在寻找答案,我怀疑我不理解一些基本概念。

我有一个班级:

class Motif(str):
    def __init__(self, s):
        str.__init__(self, s)
        self.motif = s.upper()

    def __repr__(self):
        return self.motif

    def __str__(self):
        return self.motif

使用示例:

>>> m = Motif("gtca")
>>> print m  
GTCA 

我希望能够使用Motif的这个实例搜索字符串并查找任何匹配项。

>>> s = 'GTAGGCTGAGTCATTHAGTCAT'
>>> s.find(m)  
9

有人能指出我在正确的方向吗?

我正在使用Python 2.7

1 个答案:

答案 0 :(得分:2)

__init__基本上是初始化程序,它不是构造函数。对象构造发生在__new__方法中。因此,如果要存储传递的字符串的大写版本,则应覆盖__new__

class Motif(str):
    def __new__(cls, s):
        return super(Motif, cls).__new__(cls, s.upper())

<强>演示:

>>> m = Motif("gtca")
>>> m
'GTCA'
>>> s = 'GTAGGCTGAGTCATTHAGTCAT'
>>> s.find(m)
9