2016-04-25 38 views
-1
class Dimensional: 
    def __init__(self, gravity, l=0, m=0, t=0): 
     assert type(l) == int 
     assert type(m) == int 
     assert type(t) == int 

     self.gravity = gravity 
     self.l = l 
     self.m = m 
     self.t = t 

我試圖定義一個__bool__方法,對於任何非零值 我做什麼返回true:我怎麼知道,如果一個可選的參數存在與否在Python

def __bool__(self): 
    g = self.gravity 
    _l = self.l 
    _m = self.m 
    _t = self.t 
    if not self.gravity: 
     g += 1 
    if not self.l: 
     _l += 1 
    if not self.m: 
     _m += 1 
    if not self.t: 
     _t += 1 

    if g != 0 and _l != 0 and _m != 0 and _t != 0: 
     return True 
    else: 
     return False 
+2

聲明不是控制應用程序流的好方法。你也可能會發現'any'有用 –

+3

我不明白你在'__bool__'中做了什麼。你的意思是「返回任何(self.gravity,self.l,self.m,self.t)'? – TigerhawkT3

+0

這與可選參數有什麼關係,或者確定它們是否由用戶指定? –

回答

0

剛返回一個or表達的布爾轉換上的所有屬性:

def __bool__(self): 
    return bool(self.gravity or self.l or self.m or self.t) 

如果任何這些值不爲0,將bool() PR請輸入True,否則會產生False

您的代碼將總是返回True,無論如何;對於任何字段0遞增你的變量;所以你的4個局部變量都以非零值保證。

演示上面的方法:

>>> bool(Dimensional(0,1,1,1)) 
True 
>>> bool(Dimensional(0,0,0,0)) 
False 

注意,如果你正在使用Python 2,您需要命名的方法,而不是__nonzero__(); __bool__是Python 3的名稱。

+0

謝謝!但它仍然不會通過這個:bool(Dim(0,1,1,1)) –

+0

@Frog_Luan:'bool(Dimensional(0,1,1,1))'產生'True',因爲有三個非零值。只有'bool(Dimensional(0,0,0,0))'會產生'False'。 –

+0

@Frog_Luan:你*使用Python 3,對吧?在Python 2中沒有'__bool__'方法;將其命名爲['__nonzero__'](https://docs.python.org/2/reference/datamodel.html#object.__nonzero__)。 –

相關問題