了解Python中实例属性和类属性之间的区别?

时间:2011-10-05 03:03:45

标签: python class methods instance

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

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

class MySubclass(object)
    my_method = my_method

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

案例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只会影响它绑定的实例。那是对的吗?

案例4(最后一项):

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

并且这个最终方法的问题在于它似乎将my_method创建为未绑定方法,这不符合我的需要。有没有办法在类定义中添加现有方法作为绑定实例方法?

确定。就这些。请让我知道这四个案例中哪一个最有意义。谢谢。

1 个答案:

答案 0 :(得分:1)

回答您的上一个案例,您可以使用MethodType将方法绑定到类实例:

import types

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