मेरे पास एक सार आधार वर्ग है, Animal:

class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def move(self):
        raise NotImplementedError()

    @abc.abstractmethod
    def eat(self):
        raise NotImplementedError()

अब मेरे पास एक और एबीसी है जो इन विधियों में से केवल एक को लागू करता है:

class Bird(Animal):
    def move(self):
        print("fly")

एक अन्य वर्ग जो लापता विधि को लागू करता है:

class Eagle(Bird):
    def eat(self):
        print("eagle eats")

लेकिन PyCharm Bird के बारे में शिकायत कर रहा है कि इसे "सभी अमूर्त विधियों को लागू करना चाहिए", जब मैं जानबूझकर इसे अभी भी अमूर्त रहना चाहता हूं।

क्या मुझे कुछ याद आ रहा है, या यह एक बग है? अगर यह सिर्फ एक बग है, तो क्या मैं किसी भी तरह चेतावनी को अनदेखा कर सकता हूं (#noqa के समान)?

5
Markus Meskanen 20 मई 2019, 14:04

1 उत्तर

सबसे बढ़िया उत्तर

बस Bird को सार के रूप में भी चिह्नित करें:

from abc import ABC

class Bird(Animal, ABC):
    def move(self):
        print("fly")

इसके बारे में थोड़ा सोचने के बाद, वास्तव में, मुझे लगता है कि इस उद्देश्य के लिए metaclass=ABCMeta निर्दिष्ट करने के लिए और अधिक समझदारी होगी, जैसा कि आपने मूल रूप से किया था, क्योंकि अवधारणात्मक रूप से हम Bird के वंशानुक्रम पदानुक्रम को संशोधित नहीं करना चाहते हैं। , बल्कि इसे एक अमूर्त वर्ग (PyCharm के लाभ के लिए) के रूप में चिह्नित करें, और शायद यह ऐसा करने का एक साफ तरीका है।

4
gmds 20 मई 2019, 11:32