V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
firejoke
V2EX  ›  Python

源码中这个场景,用 staticmethod 有很大的必要性吗?

  •  
  •   firejoke · 2019-01-10 16:56:46 +08:00 · 1286 次点击
    这是一个创建于 1903 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基类:

    class Schema(object):
    
    ......
    
        def filter(self, obj):
            filtered = {}
            for key, value in six.iteritems(obj):
                if self._filter_func(self.properties, key):
                    filtered[key] = value
    
    ......
    
        @staticmethod
        def _filter_func(properties, key):
            return key in properties
    

    其中一个重写了该方法的子类:

    class PermissiveSchema(Schema):
        @staticmethod
        def _filter_func(properties, key):
            return True
    

    感觉上完全不需要改成 staticmethod
    反正最终还是需要传类的属性进去

    2 条回复    2019-01-10 17:35:01 +08:00
    xpresslink
        1
    xpresslink  
       2019-01-10 17:16:09 +08:00   ❤️ 1
    完全没有必要,python 中 staticmethod 很少用到,只是当成类的不同工厂函数时候用一下的情况比较多。
    firejoke
        2
    firejoke  
    OP
       2019-01-10 17:35:01 +08:00
    @xpresslink 我也是觉得完全不必改成 staticmethod, 但源码中大量的工厂和抽象工厂,ABC 基类到处飞,
    让我深深怀疑自己没有坐着考虑的深,不敢去质疑作者......
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5494 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:55 · PVG 16:55 · LAX 01:55 · JFK 04:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.