例如 - 假设我想helloWorld()为Python的dict类型添加一个方法.我可以这样做吗?
JavaScript有一个行为方式的原型对象.也许这是糟糕的设计,我应该继承dict对象,但它只适用于子类,我希望它可以在任何和所有未来的字典上工作.
以下是它在JavaScript中的表现:
String.prototype.hello = function() {
alert("Hello, " + this + "!");
}
"Jed".hello() //alerts "Hello, Jed!"
Run Code Online (Sandbox Code Playgroud)
这是一个有用的链接,包含更多示例 - http://www.javascriptkit.com/javatutors/proto3.shtml
我想找出Python中方法的优点(它接收的参数数量).现在我这样做:
def arity(obj, method):
return getattr(obj.__class__, method).func_code.co_argcount - 1 # remove self
class Foo:
def bar(self, bla):
pass
arity(Foo(), "bar") # => 1
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这一点:
Foo().bar.arity() # => 1
Run Code Online (Sandbox Code Playgroud)
更新:现在上面的函数失败了内置类型,对此的任何帮助也将受到赞赏:
# Traceback (most recent call last):
# File "bla.py", line 10, in <module>
# print arity('foo', 'split') # =>
# File "bla.py", line 3, in arity
# return getattr(obj.__class__, method).func_code.co_argcount - 1 # remove self
# AttributeError: 'method_descriptor' object has no attribute 'func_co
Run Code Online (Sandbox Code Playgroud) 如果dir()在CPython 3.4上对某些内置可调用对象(类构造函数,方法等)进行处理,则会发现其中许多通常具有一个特殊属性__text_signature__,例如:
>>> object.__text_signature__
'()'
>>> int.__text_signature__
>>> # was None
Run Code Online (Sandbox Code Playgroud)
但是,此文档不存在.此外,谷歌搜索属性名称表明还有另一个可能的特殊属性__signature__,但我没有找到任何内置函数.
我知道它们与函数参数签名有关,但除此之外,它们的值表示什么以及它们的用途是什么?