나는 파이썬에서 추상 클래스 (v 2.7)를 처음 사용하고있다. 추상 클래스에 대한 몇 가지 자습서를 살펴 보았습니다. 추상 메소드를 구현하는 방법은 abc 모듈을 가져 와서 추상 메소드 데코레이터를 사용하는 것처럼 보입니다. 파이썬으로 왜이 클래스를 인스턴스화 할 수 있습니까? 나는 추상적 인 메소드를 구현하지 않고있다.
import abc
class AbstractAlgorithm(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def load(self, input):
"""Retrieve data from the input source and return an object."""
return
@abc.abstractmethod
def save(self, output, data):
"""Save the data object to the output."""
return
class SpecificAlgorithm(object):
def load(self, input):
return input.read()
AbstractAlgorithm.register(SpecificAlgorithm)
나는 파이썬이 날 이렇게하지 것이라는 점을 알고있다 :
AbstractAlgorithm() ==> TypeError: Can't instantiate abstract class AbstractAlgorithm with abstract methods load, save
그런데 왜 나는 추상적 인 방법 중 하나를 구현하지 않고 추상 클래스의 특정 버전을 인스턴스화 할 수 있어요? 나는 이것이 허용되지 않을 것이라고 생각할 것이다. 내가 뭔가 잘못하고 있는거야?
b = SpecificAlgorithm()
문제는 추상적 인 메소드가 구현되어 있지 않다는 것입니다. (이것들은 ...하지만 OP는 추상 구현을 호출하려고하지 않습니다. mentation 어쨌든 ...) 나는'.save' 메소드가 덮어 써지지 않았기 때문에 OP가 걱정된다고 생각하지만, SpecificAlgorithm은 AbstractAlgorithm의 가상 서브 클래스입니다. – mgilson