检查类中的函数是否为True

时间:2017-12-05 12:42:38

标签: python-3.x function class loops boolean

(使用eclipse氧气的Windows 7 64位上的Python 3.6.3)

我试图返回返回True的函数的值。您输入相关参数a,v,s,j,并根据结果发生特定情况。我已经尝试过使用callable,但由于所有这些都是可调用的,所以它不起作用。使用 dict .items()也没有用。

也许在某种程度上可以使用for循环尝试迭代通过类查找True并打破循环。不幸的是我无法设置这样的for循环。我很感激任何帮助。

class cases(object):

    def __init__(self, a, v, s, j):
        self.a = a
        self.v = v
        self.s = s
        self.j = j

    def case_one(self, a, v, s, j):
        tj = pow((s/(2*j)),1/3)
        a_max = tj * j
        v_max = j*(tj**2)
        if a >= a_max and v >= v_max:
            x = True
        else:
            x = False        
        return x, tj, a_max, v_max
    pass     

    def case_two(self, a, v, s, j):    
        tj = pow(v/j, 1/2)
        tv = (s/(j*tj**2)-2*tj)
        a_max = tj * j
        if a >= a_max and tv > 0:
            x = True
        else:
            x = False
        return x, tv, tj, a_max  
    pass   

    def case_three(self, a, v, s, j):
        ta = (a/j)*(-3/2+pow((1/4)+(s*j**2/pow(a,3)),1/2))
        tj = a/j
        v_max = j*tj*(ta+tj)
        if v >= v_max and ta > 0:
            x = True
        else:
            x = False
        return x, ta, tj, v_max  
    pass        

    def case_four(self, a, v, s, j):
        tj = a/j
        ta = (v/a)-(a/j)
        tv = (s/v)-(v/a)-(a/j)
        if tv > 0 and ta > 0:
            x = True
        else:
            x = False
        return x, tj, ta, tv
    pass

    def __call__(self):
        self.case_one()
        self.case_two()
        self.case_three()
        self.case_four()


case = cases.case_four(1,14.5,7,0.25,120)
print(case)

P.S .: 显然我并不完全明白" self"因为我必须输入一个" 1"作为第一个参数,以获得任何结果。否则我收到一条错误消息说" TypeError:case_four()缺少1个必要的位置参数:' j'"但是j等于120。

1 个答案:

答案 0 :(得分:1)

  1. 创建一个类的实例(并将您的类重命名为上层驼峰案例)。
  2. =>

    cases = Cases(14.5,7,0.25,120)
    
    1. 从您的方法中移除参数 - self已经拥有它们,因为您在__init__内将它们分配给它:
    2. =>

       def case_one(self):
              a,v,s,j = self.a, self.v, self.s, self.j   # aliases
              tj = pow((s/(2*j)),1/3)
              a_max = tj * j
              v_max = j*(tj**2)
              x = (a >= a_max and v >= v_max)
              return x, tj, a_max, v_max
      
      1. 要遍历方法以获取reurn值,请执行以下操作。请注意,使用的是实例cases,而不是类Cases
      2. =>

        for method in [cases.case_one, cases.case_two, cases.case_three, cases.case_four]:
            ret = method()
            if ret[0]:
                print(method.__name__)
                break
        else:
            print("no result was True")
        
        1. 并删除每种方法结尾处的pass ...