@classmethod 和没有自我的方法

@classmethod and method without self

假设我们有这个 class:

class Demo:

    def __init__(self, str):
        self.str = str

    def fromBytes1(bytes):
        return Demo(bytes2str(bytes))

    @classmethod
    def fromBytes2(cls, bytes):
        return cls(bytes2str(bytes))

fromBytes1fromBytes2有什么区别,除了下面的方式不能调用第一个方法?

Demo().fromBytes1(bytes)

有什么我在这里看不到的更微妙的东西吗?

假设您只打算从 class 对象调用方法,所有重要的区别都在于继承。假设你有

class Test(Demo):
    pass

如果您执行 Test.fromBytes1(b'ar'),您将获得 Demo 的实例。

如果你这样做 Test.fromBytes2(b'ar'),你会得到一个 Test 的实例。

第二种方法更灵活,因为您可以直接将Demo__class__硬编码到其中,但您必须 在第一种情况下对其进行硬编码。