Python では、__subclasscheck__ と __subclasshook__ は 2 つの特別なメソッドです
Python は、広く適応可能で効果的なプログラミング言語であり、長年にわたって人気があります。 Python のオブジェクト指向機能により、継承やポリモーフィズムなどの高品質な機能の実装が可能になります。この記事では、Python でカスタム設計の継承チェックを可能にする、あまり知られていないが魅力的な 2 つのテクニック、subclasscheck と subclasshook について詳しく説明します。
サブクラスチェックとサブクラスフックとは何ですか?
Python では、組み込みの issubclass() 関数を使用して、クラスが別のクラスのサブクラスであるかどうかを判断することは珍しくありません。デフォルトでは、この関数は継承ツリーを調べてクラス間の接続を判断します。ただし、Python には、独自のメソッド subclasscheck および subclasshook を使用して、このデフォルトの動作をオーバーライドする方法も提供されています。
__subclasscheck__(cls) − issubclass() 関数を使用してこの手法を呼び出し、クラスが他のすべてのクラスのサブクラスであるかどうかをテストします。デフォルトでは、通常の継承されたテストの結果を返しますが、オーバーライドしてこの動作を変更することができます。
__subclasshook__(cls) − このメソッドを抽象基本クラス (ABC) で定義して、 issubclass() によって実行されるサブクラス チェックをカスタマイズできます。これは、ABC の subclasscheck のデフォルト実装によって呼び出されます。
サブクラスのフックメソッド
サブクラスフック メソッドがどのように機能するかを明確に理解するために、例を見てみましょう。 「Shape」という抽象基本クラスがあり、「area」と「perimeter」という 2 つの必須メソッドがあるとします。 「Shape」のサブクラスとみなされたいクラスは、これらのメソッドを実装する必要があります。
ステップ 1 − 2 つの具体的なメソッドを使用して、抽象基本クラス「Shape」、「Area」と「Perimeter」を決定します。
ステップ 2 − 指定されたメソッド「area」および「perimeter」を実装するカスタム クラス「Circle」を生成します。
ステップ 3 - 「Shape」クラスのサブクラスフック メソッドをオーバーライドして、クラスがサブクラスであるかどうかを判断するためのカスタム基準を指定します。この場合の基準は、クラスに「Area」メソッドと「Perimeter」メソッドが必要であることです。
ステップ 4 - issubclass() 関数を使用して、「Circle」が「Shape」のサブクラスであるかどうかをテストします。カスタム サブクラス フック メソッドを使用すると、「Circle」がカスタム条件を満たすため、結果は「True」になります。 #########例### 次に、これらのメソッドを実装するカスタム クラス「Circle」を作成しましょう -
リーリー「Circle」クラスが必要なメソッドを実装している場合でも、issubclass() 関数は「Circle」が「Shape」のサブクラスであるかどうかをチェックするときに「False」を返します -
###出力### リーリーここで、サブクラスフック メソッドが登場します。 「Shape」クラスでこのメソッドをオーバーライドして、クラスがサブクラスであるかどうかを判断するためのカスタム基準を指定できます。 -
Example
リーリー 出力
「Circle」が「Shape」のサブクラスであるかどうかを確認すると、出力は次のようになります。
rreeサブクラスのチェック方法 場合によっては、サブクラスフックを使用する代わりに、サブクラスチェック メソッド自体をオーバーライドしたい場合があります。これにより、継承テストに最上級の詳細な制御を追加できます。これは例です
− ステップ 1−
サブクラス チェック メソッドをオーバーライドするカスタム基本クラス「CustomBase」を決定します。通常の継承接続をテストする代わりに、サブクラスに呼び出し可能な「magic_attribute」メソッドがあるかどうかをテストします。ステップ 2−
2 つのクラス「DerivedWithMagic」と「DerivedWithoutMagic」を生成します。前者には「magic_attribute」メソッドがありますが、後者にはありません。
第 3 步 − 利用 issubclass() 函数来测试“DerivedWithMagic”和“DerivedWithoutMagic”是否是“CustomBase”的子类。对于“DerivedWithMagic”,结论为“True”,因为它具有所需的“magic_attribute”方法;对于“DerivedWithoutMagic”,结论为“False”,因为它不再具有指定的方法。
示例
class CustomBase:
def __subclasscheck__(self, subclass):
return (hasattr(sub
class, "magic_attribute") and
callable(getattr(subclass, "magic_attribute")))
class DerivedWithMagic:
def magic_attribute(self):
pass
class DerivedWithoutMagic:
pass
print(issubclass(DerivedWithMagic, CustomBase))
print(issubclass(DerivedWithoutMagic, CustomBase))
输出
如果我们检查“Circle”是否是“Shape”的子类,则输出如下。
True False
实际用例
虽然 Python 中的默认继承机制适用于大多数场景,但在某些情况下,使用 __subclasscheck__ 和 __subclasshook__ 自定义子类检查可能会有所帮助 -
**协议执行** − 通过使用这些方法,您可以强制执行子类必须遵守的某些协议。在前面的实例中,我们决定任何被视为“Shape”子类的类都必须执行“area”和“perimeter”方法。
**混合课程** − Mixin 类的创建是为了向其他类提供特定的行为,但它们并不意味着用作独立的类。您可以使用 __subclasscheck__ 或 __subclasshook__ 定义自定义继承策略,通过利用 mixin 作为子类来识别类,尽管它们不会立即继承它。
**松散耦合** − 在某些情况下,最大限度地减少软件系统中组件之间的依赖关系是有益的。通过使用 __subclasscheck__ 和 __subclasshook__,您可以在类之间建立关系,而无需创建严格的继承层次结构。
结论
Python 中的 __subclasscheck__ 和 __subclasshook__ 方法提供了一种强大的方法来自定义继承检查。当您想要强制执行子类关系的特定要求或提供更灵活的继承结构时,这些方法特别有用。通过理解和利用这些特殊方法,您可以创建适应性更强、更健壮的 Python 程序。
以上がPython では、__subclasscheck__ と __subclasshook__ は 2 つの特別なメソッドですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

inpython、youappendelementStoalistusingtheappend()method.1)useappend()forsingleelements:my_list.append(4).2)useextend()or = formultipleElements:my_list.extend(another_list)ormy_list = [4,5,6] .3)forspecificpositions:my_list.insert(1,5).beaware

シェバンの問題をデバッグする方法には次のものがあります。1。シバン行をチェックして、それがスクリプトの最初の行であり、接頭辞スペースがないことを確認します。 2.通訳パスが正しいかどうかを確認します。 3.通訳を直接呼び出してスクリプトを実行して、シェバンの問題を分離します。 4. StraceまたはTrustsを使用して、システムコールを追跡します。 5.シバンに対する環境変数の影響を確認してください。

pythonlistscanbemanipulatedsingseveralmethodstoremoveElements:1)theremove()methodremovesthefirstoccurrenceofaspecifiedValue.2)thepop()methop()methodremovessanelementatagivenindex.3)thedelstatementementementementementementementementementemoritemoricedex.4)

Integers、strings、floats、booleans、otherlists、anddictionaryを含むpythonlistscanstoreanydatype

PythonListsSupportNumersoperations:1)AddingElementSwithAppend()、Extend()、Andinert()

Numpyを使用して多次元配列を作成すると、次の手順を通じて実現できます。1)numpy.array()関数を使用して、np.array([[1,2,3]、[4,5,6]])などの配列を作成して2D配列を作成します。 2)np.zeros()、np.ones()、np.random.random()およびその他の関数を使用して、特定の値で満たされた配列を作成します。 3)アレイの形状とサイズの特性を理解して、サブアレイの長さが一貫していることを確認し、エラーを回避します。 4)np.reshape()関数を使用して、配列の形状を変更します。 5)コードが明確で効率的であることを確認するために、メモリの使用に注意してください。

BroadcastinginNumPyisamethodtoperformoperationsonarraysofdifferentshapesbyautomaticallyaligningthem.Itsimplifiescode,enhancesreadability,andboostsperformance.Here'showitworks:1)Smallerarraysarepaddedwithonestomatchdimensions.2)Compatibledimensionsare

Forpythondatastorage、chooseLists forfficability withmixeddatypes、array.arrayformemory-efficienthogeneousnumericaldata、およびnumpyArrays foradvancednumericalcomputing.listSareversatilebuteficient efficient forlargeNumericaldatates;


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









