Heim Backend-Entwicklung Python-Tutorial Python抽象类的新写法

Python抽象类的新写法

Jun 06, 2016 am 11:18 AM
python 抽象类

记得之前learn python一书里面,因为当时没有官方支持,只能通过hack的方式实现抽象方法,具体如下 最简单的写法

class MyCls():
  def foo(self):
    print('method no implement')

运行的例子


>>> a = MyCls()
>>> a.foo()
method no implement
>>>
Nach dem Login kopieren

这样虽然可以用,但是提示不明显,还是容易误用,当然,还有更好的方法 较为可以接受的写法

class MyCls():
  def foo(self):
    raise Exception('no implement exception', 'foo method need implement')
Nach dem Login kopieren

一个简单的用例

>>> a = MyCls()
>>> a.foo()
Traceback (most recent call last):
 File "<interactive input>", line 1, in <module>
 File "<clipboard>", line 3, in foo
Exception: ('no implement exception', 'foo method need implement')
Nach dem Login kopieren

这就是2.7之前的写法了,2.7给了我们新的支持方法!abc模块(abstruct base class),这个在py3k中已经实现,算是back port吧。

我们来看看新的写法

from abc import ABCMeta
 
from abc import ABCMeta,abstractmethod
 
class Foo():
  __metaclass__ = ABCMeta
  @abstractmethod
  def bar(self):
    pass
Nach dem Login kopieren

运行效果

>>> class B(Foo):
... def bar(self):
... pass
... 
>>> B()
<__main__.B object at 0x02EE7B50>
>>> B().bar()
>>> class C(Foo):
... pass
... 
>>> C().bar()
Traceback (most recent call last):
 File "<interactive input>", line 1, in <module>
TypeError: Can't instantiate abstract class C with abstract methods bar
>>> 
Nach dem Login kopieren


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So laden Sie Deepseek Xiaomi herunter So laden Sie Deepseek Xiaomi herunter Feb 19, 2025 pm 05:27 PM

So laden Sie Deepseek Xiaomi herunter

Was sind die Vor- und Nachteile des Templatings? Was sind die Vor- und Nachteile des Templatings? May 08, 2024 pm 03:51 PM

Was sind die Vor- und Nachteile des Templatings?

Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an Jul 01, 2024 am 07:22 AM

Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an

Für nur 250 US-Dollar zeigt Ihnen der technische Leiter von Hugging Face Schritt für Schritt, wie Sie Llama 3 verfeinern Für nur 250 US-Dollar zeigt Ihnen der technische Leiter von Hugging Face Schritt für Schritt, wie Sie Llama 3 verfeinern May 06, 2024 pm 03:52 PM

Für nur 250 US-Dollar zeigt Ihnen der technische Leiter von Hugging Face Schritt für Schritt, wie Sie Llama 3 verfeinern

Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks May 06, 2024 pm 04:43 PM

Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks

Wie fragst du ihn Deepseek? Wie fragst du ihn Deepseek? Feb 19, 2025 pm 04:42 PM

Wie fragst du ihn Deepseek?

So speichern Sie die Evaluierungsfunktion So speichern Sie die Evaluierungsfunktion May 07, 2024 am 01:09 AM

So speichern Sie die Evaluierungsfunktion

Welche Software ist NET40? Welche Software ist NET40? May 10, 2024 am 01:12 AM

Welche Software ist NET40?

See all articles