相关疑难解决方法(0)

我可以为内置Python类型添加自定义方法/属性吗?

例如 - 假设我想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 monkeypatching custom-attributes built-in-types

62
推荐指数
4
解决办法
2万
查看次数

如何在Python中找出方法的arity

我想找出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)

python metaprogramming

30
推荐指数
2
解决办法
7554
查看次数

什么是__signature__和__text_signature__在Python 3.4中使用

如果dir()在CPython 3.4上对某些内置可调用对象(类构造函数,方法等)进行处理,则会发现其中许多通常具有一个特殊属性__text_signature__,例如:

>>> object.__text_signature__
'()'
>>> int.__text_signature__
>>> # was None
Run Code Online (Sandbox Code Playgroud)

但是,此文档不存在.此外,谷歌搜索属性名称表明还有另一个可能的特殊属性__signature__,但我没有找到任何内置函数.

我知道它们与函数参数签名有关,但除此之外,它们的值表示什么以及它们的用途是什么?

python signature python-internals python-3.4

11
推荐指数
2
解决办法
1643
查看次数