Python'da bir sınıf özeti oluşturmak için bir dekorasyon (merakın hatırı için) kodluyordum. Şimdiye kadar işe yarayacakmış gibi görünüyordu, ama beklenmedik bir davranışım var.Python soyut dekorasyon çalışmıyor
dekorasyon için fikri şuna benzer: Bu dekorasyon kullanırken
Sonrafrom abc import ABCMeta, abstractmethod
def abstract(cls):
cls.__metaclass__ = ABCMeta
return cls
, sadece ben test ederken
@abstract
class Dog(object):
@abstractmethod
def bark(self):
pass
Ama başardı bir soyut yöntemini tanımlamak için ihtiyaç duyulan __metaclass__
atama test ederken
d = Dog()
d.bark() //no errors
Dog.__metaclass__ //returned "<class 'abc.ABCMeta'>"
: bir köpek nesne oluşturmak doğrudan, o kadar beklenen davranır:
class Dog(object):
__metaclass__ = ABCMeta
@abstractmethod
def bark(self):
pass
Test:
d = Dog()
"Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
d = Dog()
TypeError: Can't instantiate abstract class Dog with abstract methods bark"
neden oluyor?
Cevabımı kontrol edin, sorununuzu çözer. Bu soru için teşekkürler. –