pythonの抽象ベースクラスabc.abstractmethod
1068 ワード
时には、私达は抽象的に1つの基类を出して、どのような方法があることを知っていて、しかし抽象的な方法だけで、机能を実现していないで、継承することしかできなくて、実例化することができなくて、しかし子类はこの方法を実现しなければならなくて、これは抽象的な基类を使う必要があって、多くの时に使う多くて、小猿の輪はちょうど学んだので、これをみんなに分かち合います.
ただし、このときFooをインスタンス化すると、抽象ベースクラスは継承され、インスタンス化できないため、サブクラスはインスタンス化されます.
まずこの方法を実現しなければならない.
抽象基類を理解するために、私たちは野菜という抽象基類を持っていて、キュウリ、トマト、セロリなどがありますが、あなたは永遠にキュウリ、トマトなどしか食べられません.いわゆる「野菜」を食べることはできません.このように理解するのは簡単でしょう.
import abc
class Foo(abc.ABC):
@abc.abstractmethod
def fun(self):
pass
a = Foo()
#
# TypeError: Can't instantiate abstract class Foo with abstract methods fun
class Sub_foo(Foo):
def f(self):
print('This is sub foo!')
c = Sub_foo()
# fun , sub_foo
# TypeError: Can't instantiate abstract class Sub_foo with abstract methods fun
fun :
class Sub_foo(Foo):
def fun(self):
print("From sub_foo")
def f(self):
print('This is sub foo!')
c = Sub_foo()
c.fun()
c.f()
:
From sub_foo
This is sub foo!
ただし、このときFooをインスタンス化すると、抽象ベースクラスは継承され、インスタンス化できないため、サブクラスはインスタンス化されます.
まずこの方法を実現しなければならない.
抽象基類を理解するために、私たちは野菜という抽象基類を持っていて、キュウリ、トマト、セロリなどがありますが、あなたは永遠にキュウリ、トマトなどしか食べられません.いわゆる「野菜」を食べることはできません.このように理解するのは簡単でしょう.