在一个实例中,当我仅调用实例名称时,是否可以隐式调用方法?
例如,如果我有这个
class MyClass:
def __init__(self, html):
self.html = html
def _render_html_(self):
# omitted
pass
>>> some_fancy_html = """(omitted)"""
>>> mc = MyClass(some_fancy_html)
## So instead of
>>> mc._render_html_()
## I would like to call
>>> mc
### to implicitly call the method _render_html()
有可能吗?
在Panda的源代码中,我可以在文档字符串中看到它:
Notes
-----
Most styling will be done by passing style functions into
``Styler.apply`` or ``Styler.applymap``. Style functions should
return values with strings containing CSS ``'attr: value'`` that will
be applied to the indicated cells.
If using in the Jupyter notebook, Styler has defined a ``_repr_html_``
to automatically render itself. Otherwise call Styler.render to get
the generated HTML.
在第二段中说:
Styler has defined a `_repr_html_` to automatically render itself
来源: Github: Pandas
答案 0 :(得分:3)
我认为您无法做到。我宁愿重载括号运算符,就像it's explained here一样。
>>> class MyClass:
... def __init__(self, html):
... self.html = html
... def __call__(self):
... print(self.html)
...
>>> mc = MyClass("Hello, world")
>>> mc
<__main__.MyClass instance at 0x7f3a27a29bd8>
>>> mc()
Hello, world
答案 1 :(得分:1)
将其命名为_render_html
,而不是__call__
。 mc()
将调用此方法。不能执行进一步的操作-将调用方括号放在调用代码中-但如果您将_render_html
设置为如下属性,则可以接近:
class MyClass:
@property
def html(self):
pass
然后您可以mc.html
(不带括号)来调用该函数。
答案 2 :(得分:0)
您可以尝试将此函数分配给某些变量:
mc = MyClass._render_html_(MyClass(some_fancy_html))
然后,当您调用mc时,它将调用类方法。 当然,您始终可以将已经存在的类对象作为自身传递:
some_fancy_html = """(omitted)"""
mc = MyClass(some_fancy_html)
method = MyClass._render_html_(mc)
然后键入method
将执行与执行操作相同的操作:mc._render_html_()