我正在寻找将方法调用从对象(包装器)传递到对象(包装器)的成员变量的方法。可能有许多方法需要外部化,因此在将方法添加到包装中时,无需更改包装器接口即可做到这一点。
class Wrapper(object)
def __init__(self, wrappee):
self.wrappee = wrappee
def foo(self):
return 42
class Wrappee(object):
def bar(self):
return 12
o2 = Wrappee()
o1 = Wrapper(o2)
o1.foo() # -> 42
o1.bar() # -> 12
o1.<any new function in Wrappee>() # call directed to this new function
如果此呼叫重定向是“快速”的(相对于直接呼叫,即不增加太多开销),那将是很好的。
一个比较优雅的解决方案是在包装类上创建“属性代理”:
class Wrapper(object):
def __init__(self, wrappee):
self.wrappee = wrappee
def foo(self):
print 'foo'
def __getattr__(self, attr):
return getattr(self.wrappee, attr)
class Wrappee(object):
def bar(self):
print 'bar'
o2 = Wrappee()
o1 = Wrapper(o2)
o1.foo()
o1.bar()
所有的魔术都发生在类的__getattr__
方法上,该方法Wrapper
将尝试访问Wrapper
实例上的方法或属性,如果不存在,则将尝试包装的方法或属性。
如果您尝试访问两个类都不存在的属性,则会得到以下信息:
o2.not_valid
Traceback (most recent call last):
File "so.py", line 26, in <module>
o2.not_valid
File "so.py", line 15, in __getattr__
raise e
AttributeError: 'Wrappee' object has no attribute 'not_valid'
问题内容: 我打开网址: 我想做的就是以相同的方式连接到我在某处告诉我的代理: 但这也不起作用。 我知道urllib2具有类似代理处理程序的功能,但是我无法回忆起该功能。 问题答案:
我正尝试使用selenium使用我找到的代码更改我的IP,但出现错误:selenium.Common.Exceptions.WebDriverException:消息:“ChromeDriver”可执行文件需要在PATH`From selenium import webdriver中 PROXY=“23.23.23.23:3128”#IP:端口或主机:端口
在数学中,集合表示由一个或多个确定的元素所构成的整体。在 Python 中,列表、元组、集合可以用于表示数学中的集合。 例如,分别使用列表、元组、集合表示了一个包含 3 个字符串的集合: 列表 [‘www’, ‘imooc’, ‘com’] 元组 (‘www’, ‘imooc’, ‘com’) 集合 {‘www’, ‘imooc’, ‘com’} 1. 可迭代对象 iterable 1.1 什么是
问题 你想写C扩展代码处理来自任何可迭代对象如列表、元组、文件或生成器中的元素。 解决方案 下面是一个C扩展函数例子,演示了怎样处理可迭代对象中的元素: static PyObject *py_consume_iterable(PyObject *self, PyObject *args) { PyObject *obj; PyObject *iter; PyObject *item;
问题内容: 我有很多自定义对象,需要对其执行独立(可并行化)的任务,包括修改对象参数。我试过同时使用Manager()。dict和’sharedmem’ory,但都没有用。例如: 打印出: 即对象没有被修改。 如何实现所需的行为? 问题答案: 问题在于,当将对象传递给工作进程时,它们会被泡菜包装,运送到另一个过程中,然后在其中解压缩并进行处理。您的对象没有像克隆的那样传递给其他过程。您不返回对象,
本文向大家介绍Python实现的异步代理爬虫及代理池,包括了Python实现的异步代理爬虫及代理池的使用技巧和注意事项,需要的朋友参考一下 使用python asyncio实现了一个异步代理池,根据规则爬取代理网站上的免费代理,在验证其有效后存入redis中,定期扩展代理的数量并检验池中代理的有效性,移除失效的代理。同时用aiohttp实现了一个server,其他的程序可以通过访问相应的url来从