@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))
fromBytes1
和fromBytes2
有什么区别,除了下面的方式不能调用第一个方法?
Demo().fromBytes1(bytes)
有什么我在这里看不到的更微妙的东西吗?
假设您只打算从 class 对象调用方法,所有重要的区别都在于继承。假设你有
class Test(Demo):
pass
如果您执行 Test.fromBytes1(b'ar')
,您将获得 Demo
的实例。
如果你这样做 Test.fromBytes2(b'ar')
,你会得到一个 Test
的实例。
第二种方法更灵活,因为您可以直接将Demo
或__class__
硬编码到其中,但您必须 在第一种情况下对其进行硬编码。
假设我们有这个 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))
fromBytes1
和fromBytes2
有什么区别,除了下面的方式不能调用第一个方法?
Demo().fromBytes1(bytes)
有什么我在这里看不到的更微妙的东西吗?
假设您只打算从 class 对象调用方法,所有重要的区别都在于继承。假设你有
class Test(Demo):
pass
如果您执行 Test.fromBytes1(b'ar')
,您将获得 Demo
的实例。
如果你这样做 Test.fromBytes2(b'ar')
,你会得到一个 Test
的实例。
第二种方法更灵活,因为您可以直接将Demo
或__class__
硬编码到其中,但您必须 在第一种情况下对其进行硬编码。