Python 初学者OOP;更多方法与类
我正在学习Python,并试图进入课堂。我正试图抓取一些网站,这些网站通常有我用来识别我需要的信息的不同字符串。面临的挑战是,我会陷入一种情况,在这种情况下,我可能会寻找几十个可能的字符串中的一个。在这一点上,我要继续嵌套if语句或创建新类,等等 例如:在下面的类中,我在返回的html中查找字符串x、y或z。如果我找到X,我需要执行一个函数。在if语句下面构建该函数是最有效的,还是我可以创建一个新函数并在这个类中调用它(即,我创建一个名为Python 初学者OOP;更多方法与类,python,class,oop,python-2.7,Python,Class,Oop,Python 2.7,我正在学习Python,并试图进入课堂。我正试图抓取一些网站,这些网站通常有我用来识别我需要的信息的不同字符串。面临的挑战是,我会陷入一种情况,在这种情况下,我可能会寻找几十个可能的字符串中的一个。在这一点上,我要继续嵌套if语句或创建新类,等等 例如:在下面的类中,我在返回的html中查找字符串x、y或z。如果我找到X,我需要执行一个函数。在if语句下面构建该函数是最有效的,还是我可以创建一个新函数并在这个类中调用它(即,我创建一个名为x\u Found())的新函数来解析我需要的数据 cla
x\u Found()
)的新函数来解析我需要的数据
class Link:
def __init__(self, url):
self.url = url
x = 'abc'
y = 'zyx'
z = '123'
def get_html(self):
import urllib2
html = urllib2.urlopen(self.url()).read()
return html
def find_text(self):
html = self.get_html()
if x in html:
run a function called x_found()
elif y in html:
run a different function called y_found()
elif z in html:
run an even different function called z_found()
lambda和/或方法指针的字典
method_map = {'x' : self.x_found, 'y': self.y_found, 'z':self.z_found}
strings_to_search = ['x', 'y', 'z']
for string in strings_to_search:
if string in html:
method_map[string]()
在本例中,您根本不应该使用if语句。最好创建一个字典,将字符串映射到函数,然后调用其中的适当函数 试着这样做:
def string1_found():
print "Found a string 1"
foo = {}
foo['string1'] = string1_found
那你可以一个接一个地打电话
myfunc = foo['string1']
myfunc()
如何将x/y/z_found()合并到类中?我是否只需要在下面创建更多的方法,它就可以调用它们?它们必须在上面吗?只要它们在同一个类块中,它们就可以在上面或下面。只是一个小注释,我会在
for
循环之外初始化字典,这样它就不会在每个循环上初始化。是的,这是个好主意。我只是想显示语法,我会解决这个问题。我在类中添加了一个新函数,并在另一个方法中调用它,我得到了错误“全局名称'xyz'未定义”-请解释这个问题,虽然这个答案很短,但我认为提供了一个解决方案。没有字典()
和foo这样的东西['string1']=string1_found()
将不允许您调用foo['string1']()
later@PadraicCunningham谢谢你,我只是太懒了,所以我很感激你鼓励我去看我的参考书。现在可以了吗?还是我还留下了问题?我会用foo={}
你需要存储foo['string1']=string1\u found
然后你稍后使用myfunc=foo['string1']myfunc()
调用它,你自己试试i=int,然后i(“5”)
@padraickenningham你完全正确。我刚刚在解释器中试过。好的,现在已经实际运行了代码,所以它肯定能工作。感谢那里的鼓励。