当前位置:  开发笔记 > 编程语言 > 正文

在python中扩展内置类

如何解决《在python中扩展内置类》经验,为你挑选了2个好方法。

如何在python中扩展内置类?我想在str类中添加一个方法.
我已经做了一些搜索,但我发现的都是较旧的帖子,我希望有人知道更新的东西.



1> S.Lott..:

只是对类型进行子类化

>>> class X(str):
...     def my_method(self):
...         return int(self)
...
>>> s = X("Hi Mom")
>>> s.lower()
'hi mom'
>>> s.my_method()
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 3, in my_method
ValueError: invalid literal for int() with base 10: 'Hi Mom'

>>> z = X("271828")
>>> z.lower()
'271828'
>>> z.my_method()
271828


@ S.Lott - Ruby的开放类和C#的扩展方法浮现在脑海中.
@orip:意识到这些.发现所有形式的monkeypatching都是一个管理噩梦 - 它们通过以模糊的方式注入特征来有效地防止重用.
我希望我不必继承子类,但经过一些研究后,我得出的结论是,任何其他方式都不可能,所以我会接受这个答案.
@Unkwntech:无法想象比子类化更好的方法.认真.无论你有什么想法(monkeypatching?)似乎永远不会成为一个明确,精确,明显的子类.

2> 小智..:

一种方法是使用"类重新打开"概念(本机存在于Ruby中),可以使用类装饰器在Python中实现.本页提供了一个例子:http: //www.ianbicking.org/blog/2007/08/opening-python-classes.html

我引用:

我认为使用类装饰器你可以这样做:

@extend(SomeClassThatAlreadyExists)
class SomeClassThatAlreadyExists:
    def some_method(self, blahblahblah):
        stuff

像这样实现:

def extend(class_to_extend):
    def decorator(extending_class):
        class_to_extend.__dict__.update(extending_class.__dict__)
        return class_to_extend
    return decorator

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有