[問題] hasattr 使用問題

作者: ntuleo (里歐)   2015-04-21 09:29:56
print hasattr(urllib2.URLError,'reason') #false
print hasattr(urllib2.URLError,'args') #true
class URLError(IOError):
# URLError is a sub-type of IOError, but it doesn't share any of
# the implementation. need to override __init__ and __str__.
# It sets self.args for compatibility with other EnvironmentError
# subclasses, but args doesn't have the typical format with errno in
# slot 0 and strerror in slot 1. This may be better than nothing.
def __init__(self, reason):
self.args = reason,
self.reason = reason
def __str__(self):
return '<urlopen error %s>' % self.reason
問題
1。 為什麼會找不到reason呢?
2。 為什麼需要用hasattr呢?直接看裡面有沒有attribute不就好了嗎?
作者: darkgerm (黑駿)   2015-04-21 10:03:00
要生出 instance 才會跑 __init__reason 是在 __init__ 才宣告的找得到 args 是因為他在 IOError 裡有,被繼承下來的看有沒有這個 attritube 不就是用 hasattr 看嗎XD
作者: ntuleo (里歐)   2015-04-21 20:05:00
IOE裡面的args也是在__init__裡面,為什麼就看得到呢?
作者: uranusjr (←這人是超級笨蛋)   2015-04-21 20:08:00
"IOError裡面的args也是在__init__裡面" 誰跟你說的?

Links booklink

Contact Us: admin [ a t ] ucptt.com