在find方法中如何使类表现为super

2024-09-29 21:28:40 发布

您现在位置: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

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

我使用的是python2.7


Tags: 答案self示例用法returninitdefupper
1条回答
网友
1楼 · 发布于 2024-09-29 21:28:40

^{}基本上是一个初始值设定项,而不是构造函数。对象构造发生在^{}方法中。因此,如果要存储传递的字符串的大写版本,应该重写__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

相关问题 更多 >

    热门问题