如果子项不同的参数(不同的参数数量)为负数,则检查父类?

时间:2016-10-27 11:57:07

标签: python python-3.x oop inheritance

假设我们有这个父类:

class Parent:
    def __init__(self):
        pass      

这两个孩子:

class Child1(Parent):
    def __init__(self, 1stparam):
        pass

class Child2(Parent):
    def __init__(self, 1stparam, 2ndparam):
        pass   

我想要一个类Parent的方法来检查传递的参数是否为负数。例如:

class Parent:
    def __init__(self):
        pass   

    def check_data( allparameters ):
        if allparameters <0:
            return false

我希望通过继承此方法为所有孩子check_data,例如:

mychild1 child1(-1)
mychild2 child2(1, -1)
[mychild1.check_data(), mychild2.check_data()]

当然应该返回[False, False]

2 个答案:

答案 0 :(得分:1)

您需要*args的功能。示例示例:

def check_negative(*args):
    for item in args:
        if item < 0:
            return False
    else:
        return True

示例运行:

>>> check_negative(1)
True
>>> check_negative(-1)
False
>>> check_negative(1, 1)
True
>>> check_negative(1, -1)
False
>>> check_negative(-1, -1)
False

有关详细信息,请参阅:What do *args and **kwargs mean?

答案 1 :(得分:1)

你可以这样做:

class Parent(object):
    def __init__(self):
        self.data = []

    def check_data(self):
        return all(map(lambda arg: arg >= 0, self.data))


class Child1(Parent):
    def __init__(self, param_1):
        self.data = [param_1]


class Child2(Parent):
    def __init__(self, param_1, param_2):
        self.data = [param_1, param_2]


print(Child1(1).check_data())  # True
print(Child1(-1).check_data())  # False
print(Child2(1, 1).check_data())  # True
print(Child2(1, -1).check_data())  # False
print(Child2(-1, 1).check_data())  # False
print(Child2(-1, -1).check_data())  # False
  • map函数对iterable的每个元素应用一个函数,并以可迭代的形式返回结果。
  • 当提供负数时,lambda函数返回False。
  • 如果给定列表中的所有元素都为True,则all函数返回True。