【问题标题】:making "string".functions() functions python [duplicate]制作“字符串”.functions()函数python [重复]
【发布时间】:2012-10-16 01:40:25
【问题描述】:

可能重复:
Can I add custom methods/attributes to built-in Python types?

在使用 Python 的过程中,我看到了许多可以用于字符串的东西,例如 .lower().startswith().endswith(),但是,我不确定如何制作与它类似的函数,就像我所做的那样想到将不得不使用一个将字符串传递给函数的类,而我只想做类似"the string".myfunc()而不是MyClassObjWithString.myfunc()的事情。

有没有办法实现这样的功能?

【问题讨论】:

    标签: python function python-2.7


    【解决方案1】:

    在 python 中,字符串文字总是basestring 类型(或 py3k 中的str)。因此,您不能向字符串文字添加方法。您可以创建一个在构造函数中接受字符串并具有可能有用的方法的类:

    MyClass("the string").myfunc()
    

    当然,那么可能有人会说你应该写一个函数:

    myfunc("the string")
    

    【讨论】:

    • 所以,我认为 python 没有任何“原型”机制 a-la javascript 可以让您覆盖/扩展基本字符串(对吗?)。但是你能不能让 MyClass 从 basicstring 派生,所以 basicstring 中可用的所有方法也都可用。例如MyClass("字符串").lower()?
    • @Uri -- 没错。
    • 道歉,我的第二个问题不是是/否问题(尽管它是这样措辞的)。你能指出我如何从基本字符串继承。
    • class MyString(basestring): pass -- 如果您只是使用 ascii,那么 class MyString(str): pass 可能更容易。请参阅作为问题可能重复发布的链接。那里有一个例子。
    【解决方案2】:

    你不能写一个你可以用的函数

    "the string".myfunc()
    

    因为这意味着修改字符串类。但是为什么不写一个你可以做到的方法

    myfunc("the string")
    

    类似

    def myfunc(s):
       return s * 2
    

    【讨论】:

      【解决方案3】:

      这些是方法,虽然您可以在(某些)类定义后添加或替换方法(一种称为猴子修补的做法),但强烈建议不要使用内置类,也不可能这样做。

      只需使用一个函数。

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 1970-01-01
        • 2011-10-31
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        • 2011-12-17
        • 2015-04-06
        • 1970-01-01
        相关资源
        最近更新 更多