Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 初学者OOP;更多方法与类_Python_Class_Oop_Python 2.7 - Fatal编程技术网

Python 初学者OOP;更多方法与类

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

我正在学习Python,并试图进入课堂。我正试图抓取一些网站,这些网站通常有我用来识别我需要的信息的不同字符串。面临的挑战是,我会陷入一种情况,在这种情况下,我可能会寻找几十个可能的字符串中的一个。在这一点上,我要继续嵌套if语句或创建新类,等等

例如:在下面的类中,我在返回的html中查找字符串x、y或z。如果我找到X,我需要执行一个函数。在if语句下面构建该函数是最有效的,还是我可以创建一个新函数并在这个类中调用它(即,我创建一个名为
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你完全正确。我刚刚在解释器中试过。好的,现在已经实际运行了代码,所以它肯定能工作。感谢那里的鼓励。