python - 我是否理解 Python 中实例属性和类属性之间的区别?

标签 python class methods instance

假设我有一个方法和一个类:

def my_method(self):
    self.mark = 'Knopfler'

class MySubclass(object)
    my_method = my_method

我可以想到 3 或 4 种方法在另一个类中使用 my_method。

案例1: 如果我想在另一个类中访问 my_method,如下所示:

class MyClass(object):
    def __init__(self):
        self.my_subclass = MySubclass()

我是否正确地认为这将允许我在这样的实例上使用 my_method:

my_inst = MyClass()
my_inst.my_subclass.my_method()

这似乎按我的预期工作,但如果我这样做: 案例2:

class MyClass(object):
    my_subclass = MySubclass

my_inst = MyClass()
my_inst2 = MyClass()
my_inst.my_subclass.my_method()

据我了解,上一行会将 my_method 应用于 my_instmy_inst2。那是对的吗?

案例3: 将 my_method 作为 MyClass 属性的另一种方法是:

class MyClass(object):
    my_method = my_method

据我了解,当我有多个 MyClass 实例时,应用 my_method 将仅影响它所绑定(bind)的实例。那是对的吗?

案例4(最后一个):

class MyClass(object):
    def __init__(self):
        self.my_method = my_method

这个 final方法的问题在于,它似乎将 my_method 创建为未绑定(bind)的方法,这不适合我的需求。有没有办法在类定义中添加现有方法作为绑定(bind)实例方法?

好的。就这些。请让我知道这四种情况中哪一种最适合使用。谢谢。

最佳答案

回答您的最后一个案例,您可以使用 MethodType 将方法绑定(bind)到类实例:

import types

class MyClass(object):
    def __init__(self):
        self.my_method = types.MethodType(my_method, self)

关于python - 我是否理解 Python 中实例属性和类属性之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656289/

相关文章:

java - android - 如何从对象设置文本

C++ Basic Constructor 不打印文本

python - 具有重要目录结构的 pyinstaller

python - 在python中从类vs对象调用函数

oop - 面向对象编程 - 何时添加新类?

Java,小程序 : How to block the activation of paint() before init() finishes it's work

.net - 在哪里放置方法?

generics - 将 trait 中方法的返回类型与实现该 trait 的类型绑定(bind)

python - 针对数组内的 .NET 数组的嵌套列表理解

python - 如何像使用 Python 一样使用 SQL,通过复制行同时更改该行中的一个值(其中该值源自不同的列)?