nut*_*hip 4 python class class-method
我已经熟悉了这个概念,最值得注意的是观看了Raymond Hettinger的精彩视频并阅读了这里接受的答案,我想知道我的错误.
class ReadHTML(object):
def __init__(self, url):
page = urlopen(url).read()
self.page = page
@classmethod
def from_file(cls, path):
page = open(path).read()
return cls(page)
Run Code Online (Sandbox Code Playgroud)
这有效
r = ReadHTML('http://example.com')
print r.page
Run Code Online (Sandbox Code Playgroud)
而事实并非如此
r = ReadHTML.from_file('example.html')
print r.page
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误,好像我试图"urlopen"文件:
File "/usr/lib/python2.7/urllib2.py", line 258, in get_type
raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: <!doctype html>
Run Code Online (Sandbox Code Playgroud)
你能看出什么是错的吗?
ReadHTML.__init__()当你打电话时,你仍在呼叫班级初始化者cls(page); 该呼叫与呼叫没有什么不同ReadHTML(page),您只是使用不同的引用.此方法仅接受url参数,代码将其传递给该参数urlopen().
调整您的ReadHTML.__init__()方法以处理传递页面而不是URL:
class ReadHTML(object):
def __init__(self, url=None, page=None):
if url is not None:
page = urlopen(url).read()
self.page = page
@classmethod
def from_file(cls, path):
page = open(path).read()
return cls(page=page)
Run Code Online (Sandbox Code Playgroud)
现在代码支持生成实例的两个路径.