首页 > 解决方案 > Python 一个类方法并定义一个默认值(如果参数为空)和静态方法

问题描述

我已经调试fix_keep_int_value_as_string了好几个小时了。我认为发送参数默认值的正确方法是这样的def fix_keep_int_value_as_string(self, s='')

不知何故,下面的 def 方法总是输出s为空字符串

为什么?以及如何正确设置默认参数值(如果未通过)

class BaseShirtsSpider(Spider):
    # Strip numbers only, be aware! returns string
    @staticmethod
    def fix_keep_int_value_as_string(self, s=''):
        print(s)
        s = str(s)
        print(s)
        s = re.sub('[^0-9\-]','',s)
        print(s)
        return s   


class ChildBaseSpider(BaseShirtsSpider):
    print(self.fix_keep_int_value_as_string(4))
    print(self.fix_keep_int_value_as_string("4"))

标签: pythonpython-3.x

解决方案


这里有几个问题:

  1. 静态方法不需要self参数。目前您正在尝试传递'4'self变量fix_keep_int_value_as_string而不是s变量。
  2. 在类被初始化之前(即在方法被调用之后),self变量 inChildBaseSpider不存在。__init__

假设Spider该类不接受任何参数,则以下内容将起作用:

class BaseShirtsSpider(Spider):
    # Strip numbers only, be aware! returns string
    @staticmethod
    def fix_keep_int_value_as_string(s=''):
        print(s)
        s = str(s)
        print(s)
        s = re.sub('[^0-9\-]', '', s)
        print(s)
        return s


class ChildBaseSpider(BaseShirtsSpider):
    def __init__(self):
        print(self.fix_keep_int_value_as_string(4))
        print(self.fix_keep_int_value_as_string("4"))


ChildBaseSpider()

推荐阅读