我是一名习惯于在C#中编程的程序员,我正在尝试使用python的抽象类实现类似于C#接口的功能。
如果我想确保某个类(以下示例中的Concrete)具有某些属性或方法,我将创建一个接口IBase,并确保此类实现此接口。如果类没有实现所有必需的方法和属性,编译器将返回错误。
示例:
public interface IBase
{
void Foo();
void Bar();
}
public class Concrete : IBase
{
public void Foo()
{
Console.WriteLine("Foo is implemented");
}
}
结果:
Program.cs(25,33): error CS0535: 'Program.Concrete' does not implement interface member 'Program.IBase.Bar()'
我试图在python(2.7)中实现similair。通过使用抽象方法创建一个抽象类Base,并使Concrete类成为此抽象类的子类。应该发生的事情是,如果对象没有获得所有必需的方法和属性,则在实例化对象时会抛出错误,但在下面的示例中,程序似乎运行良好,直到缺失的函数实际获得'被称为。
示例:
from abc import ABCMeta, abstractmethod
class Base:
_metaclass_ = ABCMeta
@abstractmethod
def Foo(self):
raise NotImplementedError()
@abstractmethod
def Bar(self):
raise NotImplementedError()
class Concrete(Base):
def Foo(self):
print "Foo is implemented"
c = Concrete()
c.Foo()
c.Bar()
结果:
Foo is implemented
Traceback (most recent call last):
File "temp.py", line 27, in <module>
c.Bar()
File "temp.py", line 19, in Bar
raise NotImplementedError()
NotImplementedError
如果有人能告诉我出了什么问题,我将不胜感激。
答案 0 :(得分:1)
@ johnsharpe的评论是正确的: