【问题标题】:do I understand the difference between instance attributes and class attributes in Python?我了解 Python 中实例属性和类属性之间的区别吗?
【发布时间】:2011-12-01 03:51:22
【问题描述】:

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

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

案例4(最后一个):

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

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

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

【问题讨论】:

    标签: python class methods instance


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 2021-12-26
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多