SUBJ.
这是否意味着在免费帐户中我的api请求数量有限?
响应部分的示例:
{
"@type": "pending",
"remaining_requests": 9,
"repository": {
"@type": "repository",
Run Code Online (Sandbox Code Playgroud)
当我发送第一个回复时,值为10.经过第二次回复 - 它变为9 ...
如果某个类扩展了 abc 类(抽象基类),那么除非我定义所有抽象方法,否则我无法实例化它。但通常在实现装饰器模式时,我只想定义一些抽象方法,而其他方法则仅委托给装饰对象。这个怎么做?
例如,我想让下面的代码工作:
from abc import ABCMeta, abstractmethod
class IElement(object):
__metaclass__ = ABCMeta
@abstractmethod
def click(self):
return
@abstractmethod
def hover(self):
return
# ... more IElement's abstractmethods...
class StandardElement(IElement):
def click(self):
return "click"
def hover(self):
return "hover"
# ... more implemented IElement's methods...
class MyElement(IElement):
def __init__(self, standard_element):
self._standard_element = standard_element
delegate(IElement, standard_element)
def click(self):
return "my click"
assert MyElement(StandardElement()).click() == 'my click'
assert MyElement(StandardElement()).hover() == 'click'
Run Code Online (Sandbox Code Playgroud)
代替
from abc import ABCMeta, abstractmethod
class IElement(object):
__metaclass__ = ABCMeta
@abstractmethod
def …
Run Code Online (Sandbox Code Playgroud) 主语
例子:
MyList(object):
def __init__(self, list_to_be_wrapped):
self._items = list_to_be_wrapped
def __getattr__(self, item):
return getattr(self._items, item)
Run Code Online (Sandbox Code Playgroud)
然后
MyList([1, 2, 3])[-1]
Run Code Online (Sandbox Code Playgroud)
将提高: TypeError: ‘MyList’ object does not support indexing
尽管:
MyList([1, 2, 3]).pop()
Run Code Online (Sandbox Code Playgroud)
将完美运行(pop
将被拦截__getattr__
并重定向到_items
)
在我看来,__getattr__
考虑到“通过组合而不是继承实现自己的容器类型”的情况,拦截魔术方法会非常有帮助。为什么python不支持这种“拦截”?