python - 是否有实例方法

标签 python methods

考虑以下示例:

class Foo(object):
    def bar(self):
        return "bar"

class Bar1(object):
    def __init__(self):
        self.foo = Foo()
    def bar(self):
        return self.foo.bar()

class Bar2(object):
    def __init__(self):
        self.bar = Foo().bar

Bar1().bar() == Bar2().bar()

应该选择 Bar1 和 Bar2 中的哪一个?替代方案的优点/缺点是什么?

我想问的是,有一个实例只有一个方法,该方法在另一个实例中使用。我应该明确表示它确实是一种“方法”(Bar1),还是应该保存一个函数调用和一些复杂性(Bar2)?

最佳答案

Bar2 显然是一种 hack(可能是为了减少源代码长度,也可能是为了减少调用开销)。我不会这样做。

原因:

Bar2().barFoo 的一个方法(这很令人惊讶,因此没有好的风格)。您可以通过查看 Bar2().bar.im_self 自行检查。

② 子类无法重写Bar2的方法。您可以通过这种方式禁用类的一项有值(value)的功能。

③ 稍后更改 Bar 的 foo 只会在 Bar1 中产生预期的效果,而在 Bar2 中则会产生指向 foo 方法的指针原来的 foo 仍将使用。

关于python - 是否有实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18847411/

相关文章:

python - 故障转移选项在 mysql.connector 中抛出错误

java - 将数字因式分解放入数组中

java - 在 java 项目中将方法(非 get 和 set)放在哪里才能符合 Spring MVC

c# - 与 lambda 相比,C# 7 本地函数有哪些优势?

python - 在 Python 中获取繁忙的 CPU 数量

python - 用 Beautiful soup 解析 JS

python - nose-gae 环境变量问题

python - 一本宽容的字典

ruby - 带有可选参数的方法

c# - 使用参数对各种方法调用进行排队