如果value为null

时间:2016-11-08 00:41:58

标签: python python-2.7

如果没有为我传入此类的对象分配值,我无法弄清楚如何分配值。

我知道这段代码看起来有些复杂,但我把它作为一个例子来回答我的问题。

该类只是为作为对象传入的字符串中的每个字母分配一个数值。然后,pairs.generate将打印与给定的任何字母相关联的数字。如果给出的字母不在创建的字典中,则返回0.因此,如果字典为空,则将为给定的任何字母输出0。

我想要做的是如果没有传入对象则输出0,但是我收到以下错误: TypeError: init ()只需要2个参数(给定1个)

要查看工作原理,请传递字符串" ABCD"作为对象并更改传递给pairs.generate()的字母。为了演示在没有传递对象时我想要发生什么,在("")中传递一个空字符串。这将输出0,这是我想要在没有传递对象而不是接收错误消息时发生的事情。

class Pairs(object):
def __init__(self, letters):
    print letters
    counter = 1
    d = {}
    for x in letters:
        d[x] = counter
        counter +=1

    self.d = d
    print self.d
    pass

def generate(self, letter):
    print "this is the key", letter
    if letter not in self.d:
        print "this key isn't in the dictionary:", letter
        return 0
    else:
        print "this is the value", self.d[letter]
        return self.d[letter]


enter = Pairs()
print enter.generate("F")

修改 我试过从我的理解中传递一个默认参数。我尝试了一些想法:

class Plugboard(object):
    if object is None:
       object = ""

但是,我仍然收到同样的错误。

1 个答案:

答案 0 :(得分:1)

您需要显式传递 init 方法所需的参数,或者向 init 添加默认参数。以下是包含默认参数的示例

class Pairs(object):
    def __init__(self, letters=""):  # added default value for letters
        print (letters)
        counter = 1
        d = {}
        for x in letters:
            d[x] = counter
            counter += 1

        self.d = d
        print(self.d)
        pass # this doesn't do anything

    def generate(self, letter):
        print ("this is the key", letter)
        if letter not in self.d:
            print ("this key isn't in the dictionary:", letter)
            return 0
        else:
            print ("this is the value", self.d[letter])
            return self.d[letter]


enter = Pairs() # this calls __init__, should pass 'letters'
print (enter.generate("F"))