Hãy xem xét đoạn mã sau:
class Base(object):
@classmethod
def do(cls, a):
print cls, a
class Derived(Base):
@classmethod
def do(cls, a):
print 'In derived!'
# Base.do(cls, a) -- can't pass `cls`
Base.do(a)
if __name__ == '__main__':
d = Derived()
d.do('hello')
> $ python play.py
> In derived!
> <class '__main__.Base'> msg
Từ Derived.do
, làm thế nào để tôi gọi Base.do
?
Tôi thường sử dụng super
hoặc thậm chí trực tiếp tên lớp cơ sở nếu đây là một phương thức đối tượng bình thường, nhưng dường như tôi không thể tìm thấy cách gọi classmethod trong lớp cơ sở.
Trong ví dụ trên, Base.do(a)
in Base
lớp thay vì Derived
lớp.