在python中将函数转换为类方法



为了更好地构建代码,我想创建这个字符串子类:class StringQuotes(str(:通行证:

把这些函数和变量放在那里:

SINGLE_QUOTE = "'"

def StringMask_QuoteSingle(s: str ) -> str:
return s.replace(SINGLE_QUOTE , SINGLE_QUOTE *2)

def StringSingleQuote(s, quoteChar = SINGLE_QUOTE ):
s = StringMask_QuoteSingle(s)
return StringQuote( s, quoteChar)
def StringQuote(s, quoteChar ):
return quoteChar + s + quoteChar

SingleQuote应该是静态常量。(为了简单起见,如果它不是只读的,也可以(

在这样做的时候(->请参阅我的问题的答案(我遇到了一些问题,我认为在这里分享这个问题可能很好。我会很高兴有一个审查,并看到你的想法改进。


这就是我想到的:

class StringQuotes(str):

SingleQuote = "'"


def Mask_QuoteSingle( _ : str ) -> str:
return str.replace( _, "'" , "'" *2 )


def SingleQuote( _ , quoteChar = SingleQuote ):
_  = _.Mask_QuoteSingle( )
return StringQuotes.Quote( _ , quoteChar)

def Quote( _ , quoteChar ):
return quoteChar + _  + quoteChar

我选择_而不是self,因为它看起来更好。然而,与一个函数相比,对这个self.的所有需求仍然使视图变得混乱。

问题:

  1. 为什么我不能执行_.replace(...)?为什么必须是

    str.replace(_,…(?还有其他方法吗?

  2. 。。。关于str.replace( _, "'"),我如何使用SingleQuote

    • replace( SingleQuote,=>抱怨找不到单引号

    =>NameError:名称"DoubleQuote"未定义

    • replace( _.SingleQuote,replace( StringQuotes.SingleQuote,

    =>TypeError:必须是str,而不是方法什么为什么SingleQuote是一个方法/函数?我不明白。它是str或变量,但不是函数!Python是否将类变量转换为"property get(("(<-我在Visual Basic中看到过这样的东西(

  3. 为什么SingleQuote在这里起作用:

    def SingleQuote(_,quoteChar=SingleQuot(:

  4. 关于return StringQuotes.Quote(我能避免StringQuotes的重复并写一些类似me.Quote(的东西吗

以下是"我的"问题的答案:

class StringQuotes(str):

SingleQuote = "'"


def Mask_QuoteSingle( _ : str ) -> str:
return str.replace( _, "'" , "'" *2 )


def SingleQuote( _ , quoteChar = SingleQuote ):
_  = _.Mask_QuoteSingle( )
return StringQuotes.Quote( _ , quoteChar)

def Quote( _ , quoteChar ):
return quoteChar + _  + quoteChar

我选择_而不是self,因为它看起来更好。然而,与一个函数相比,对这个self.的所有需求仍然使视图变得混乱。

最新更新