cari
Rumahpembangunan bahagian belakangTutorial PythonPython 里没有接口,如何写设计模式?

最近在学设计模式,正在看《大话设计模式》和《深入浅出设计模式》(就是head first那本)
一本用的是C#,一本用JAVA。都有接口。
(当一个类实现接口的时候,必须把接口里面的方法都实现一遍。否则会报错。)
(嗯..我知道C#和Java都不支持多重继承,Python里支持)
我想用Python把这些设计模式实现一遍。

Python里没有接口。如何实现设计模式?用多重继承的方式?
(我不是一定要用interface. 我只是想知道在没有interface语言里要如何解决。)
(问题已经搜索过了 = = 查不到答案才来这儿的,非伸手。。)

回复内容:

不要看java的设计模式教材就觉得搞设计模式就是设计interface。显然完全不是这样的。设计模式搞了那么多东西就是在告诉你如何在各种情况下解耦你的代码,让你的代码在运行时可以互相组合。这就跟兵法一样。难道有了飞机大炮兵法就没有用了吗?


当然了,动态类型语言和函数式语言有自己的模式,他们长得跟四人帮写的东西不太一样,因为有些模式已经化作了语法,而有些语法又化作了模式。搞架构切记生搬硬套,这是没有好结果的。


设计模式就是在给语言打补丁,所以同样的东西在Java、C#和C++下面搞出来都不一样呢。C++有些很好的东西python没有,有些东西C++可以流畅的写python就只能打补丁了,如果遇到这个问题的人非常多,这样就产生了新的针对python的模式了

关于设计模式和接口,楼上各位说了不少了。我就不参合了。也一直是个容易引起口水的话题。 既然楼主想用Python把这些设计模式实现一遍。
我就推荐一个很棒的项目给你,已经有人做过这件事了,而且做的很棒 ,你在用python实现这些设计模式卡壳时,可以参考下别人的做法~
python-patterns ---A collection of design patterns/idioms in Python
Python的设计模式问题可以参考这本书.
从Python角度重新审视了那二十几种模式, (然而很多用不到, 作者会解释为什么用不到
貌似市面上讲Python设计模式的只此一本. pypi.python.org/pypi/zo

另外我没明白,为什么设计模式必须要依赖Interface? 看看peter norvig的文章,Design Patterns in Dynamic Languages,在一个支持first class function的语言里,大部分设计模式都不见了。
java设计模式这么重,很大一部分原因是因为语言的表达能力太弱,设计模式本身不是描述业务逻辑的,把业务逻辑隐藏在一个个模式之下,感觉就像在跟这个语言斗争。

再分享Mark Dominus的一篇文章 The Universe of Discourse : Design patterns of 1972
我觉得写的很好,Java/c++里的很多模式,并不是用来解决特定情境下的recurring problem. 很大一部分模式都是用来弥补语言自己表达能力的不足。 动态类型,first-class function,宏...可以很方便地实现很多模式

Visitor Pattern -> Generic Functions (Multiple Dispatch)
Factory Pattern -> Meta Classes, closures
Singleton Pattern -> Meta Classes
Iterator Pattern -> Anonymous Functions (used with Higher Order Functions)
Mediator, Observer -> Method combination
Facade Pattern -> Modules (Norvig)
...

滥用动态特性、高阶函数、宏...,很容易导致程序难以维护,并可能有效率陷阱。
Java让你更精心地做接口设计,当然也有很多是过度设计,,并且原本是可以不那么“绕”的。。

设计模式是为了更好地做接口设计(类、对象、模块、函数之间的接口),封装变化,方便扩展。
有高级特性的语言,实现起来更直接而已。换个角度来说,也更容易滥用“设计模式”。。 使用zope.interface
<span class="kn">from</span> <span class="nn">zope.interface</span> <span class="kn">import</span> <span class="n">Interface</span><span class="p">,</span> <span class="n">implements</span>
<span class="k">class</span> <span class="nc">IMan</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">talk</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="sd">"""comments"""</span>

<span class="k">class</span> <span class="nc">Geek</span><span class="p">():</span>
    <span class="n">implements</span><span class="p">(</span><span class="n">IMan</span><span class="p">)</span>
    <span class="k">def</span> <span class="nf">talk</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="k">print</span> <span class="s">"知了知了你别吵, 怪蜀黍正在睡午觉"</span>

<span class="ow">or</span>

<span class="nd">@implementer</span><span class="p">(</span><span class="n">IMan</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">Geek</span><span class="p">():</span> 
    <span class="k">def</span> <span class="nf">talk</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
        <span class="k">print</span> <span class="s">"知了知了你别吵, 怪蜀黍正在睡午觉"</span>
看到这个问题,突然觉得设计模式真是一个很容易被误解的东西

实际上软件设计只需要遵循一下原则,就可以设计出非常优雅的结构:
单一职责原则
开放封闭原则
里氏替换原则
依赖倒置原则
接口隔离原则

而所谓的设计模式,其实只是为了在特定语言特性中应用这些原则的产物。知道这个,就不会执着于使用设计模式了 知道Python中接口的表示(实现)的有两种方法吧
1. @范培说的 zope.interface 这个在 twisted用得很多
2. Pyhton中内置的ABC模块。 这里有些文档可以看下dev.pocoo.org/~mitsuhik Flash内部用到的
然后这里有个文章比较的 Deciphering Glyph :: Explaining Why Interfaces Are Great 所有的duck typing的编程语言都不需要设计模式。

《设计模式》你看看是有帮助的,
但是想在Python中使用就很没必要。
Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Pembelajaran Python: Adakah 2 jam kajian harian mencukupi?Pembelajaran Python: Adakah 2 jam kajian harian mencukupi?Apr 18, 2025 am 12:22 AM

Adakah cukup untuk belajar Python selama dua jam sehari? Ia bergantung pada matlamat dan kaedah pembelajaran anda. 1) Membangunkan pelan pembelajaran yang jelas, 2) Pilih sumber dan kaedah pembelajaran yang sesuai, 3) mengamalkan dan mengkaji semula dan menyatukan amalan tangan dan mengkaji semula dan menyatukan, dan anda secara beransur-ansur boleh menguasai pengetahuan asas dan fungsi lanjutan Python dalam tempoh ini.

Python untuk Pembangunan Web: Aplikasi UtamaPython untuk Pembangunan Web: Aplikasi UtamaApr 18, 2025 am 12:20 AM

Aplikasi utama Python dalam pembangunan web termasuk penggunaan kerangka Django dan Flask, pembangunan API, analisis data dan visualisasi, pembelajaran mesin dan AI, dan pengoptimuman prestasi. 1. Rangka Kerja Django dan Flask: Django sesuai untuk perkembangan pesat aplikasi kompleks, dan Flask sesuai untuk projek kecil atau sangat disesuaikan. 2. Pembangunan API: Gunakan Flask atau DjangorestFramework untuk membina Restfulapi. 3. Analisis Data dan Visualisasi: Gunakan Python untuk memproses data dan memaparkannya melalui antara muka web. 4. Pembelajaran Mesin dan AI: Python digunakan untuk membina aplikasi web pintar. 5. Pengoptimuman Prestasi: Dioptimumkan melalui pengaturcaraan, caching dan kod tak segerak

Python vs C: Meneroka Prestasi dan KecekapanPython vs C: Meneroka Prestasi dan KecekapanApr 18, 2025 am 12:20 AM

Python lebih baik daripada C dalam kecekapan pembangunan, tetapi C lebih tinggi dalam prestasi pelaksanaan. 1. Sintaks ringkas Python dan perpustakaan yang kaya meningkatkan kecekapan pembangunan. 2. Ciri-ciri jenis kompilasi dan kawalan perkakasan meningkatkan prestasi pelaksanaan. Apabila membuat pilihan, anda perlu menimbang kelajuan pembangunan dan kecekapan pelaksanaan berdasarkan keperluan projek.

Python dalam Tindakan: Contoh dunia nyataPython dalam Tindakan: Contoh dunia nyataApr 18, 2025 am 12:18 AM

Aplikasi dunia sebenar Python termasuk analisis data, pembangunan web, kecerdasan buatan dan automasi. 1) Dalam analisis data, Python menggunakan panda dan matplotlib untuk memproses dan memvisualisasikan data. 2) Dalam pembangunan web, kerangka Django dan Flask memudahkan penciptaan aplikasi web. 3) Dalam bidang kecerdasan buatan, tensorflow dan pytorch digunakan untuk membina dan melatih model. 4) Dari segi automasi, skrip python boleh digunakan untuk tugas -tugas seperti menyalin fail.

Penggunaan Utama Python: Gambaran Keseluruhan KomprehensifPenggunaan Utama Python: Gambaran Keseluruhan KomprehensifApr 18, 2025 am 12:18 AM

Python digunakan secara meluas dalam bidang sains data, pembangunan web dan bidang skrip automasi. 1) Dalam sains data, Python memudahkan pemprosesan dan analisis data melalui perpustakaan seperti numpy dan panda. 2) Dalam pembangunan web, rangka kerja Django dan Flask membolehkan pemaju dengan cepat membina aplikasi. 3) Dalam skrip automatik, kesederhanaan Python dan perpustakaan standard menjadikannya ideal.

Tujuan utama python: fleksibiliti dan kemudahan penggunaanTujuan utama python: fleksibiliti dan kemudahan penggunaanApr 17, 2025 am 12:14 AM

Fleksibiliti Python dicerminkan dalam sokongan multi-paradigma dan sistem jenis dinamik, sementara kemudahan penggunaan berasal dari sintaks mudah dan perpustakaan standard yang kaya. 1. Fleksibiliti: Menyokong pengaturcaraan berorientasikan objek, fungsional dan prosedur, dan sistem jenis dinamik meningkatkan kecekapan pembangunan. 2. Kemudahan Penggunaan: Tatabahasa adalah dekat dengan bahasa semulajadi, perpustakaan standard merangkumi pelbagai fungsi, dan memudahkan proses pembangunan.

Python: Kekuatan pengaturcaraan serba bolehPython: Kekuatan pengaturcaraan serba bolehApr 17, 2025 am 12:09 AM

Python sangat disukai kerana kesederhanaan dan kuasa, sesuai untuk semua keperluan dari pemula hingga pemaju canggih. Kepelbagaiannya dicerminkan dalam: 1) mudah dipelajari dan digunakan, sintaks mudah; 2) perpustakaan dan kerangka yang kaya, seperti numpy, panda, dan sebagainya; 3) sokongan silang platform, yang boleh dijalankan pada pelbagai sistem operasi; 4) Sesuai untuk tugas skrip dan automasi untuk meningkatkan kecekapan kerja.

Belajar python dalam 2 jam sehari: panduan praktikalBelajar python dalam 2 jam sehari: panduan praktikalApr 17, 2025 am 12:05 AM

Ya, pelajari Python dalam masa dua jam sehari. 1. Membangunkan pelan kajian yang munasabah, 2. Pilih sumber pembelajaran yang betul, 3 menyatukan pengetahuan yang dipelajari melalui amalan. Langkah -langkah ini dapat membantu anda menguasai Python dalam masa yang singkat.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma