ホームページ >バックエンド開発 >Python チュートリアル >Python拡張組み込み型の実装方法の分析

Python拡張組み込み型の実装方法の分析

黄舟
黄舟オリジナル
2017-10-17 10:26:341687ブラウズ

この記事では、Python での組み込み型の拡張方法を主に紹介し、Python での組み込み型の拡張とサブクラスの拡張の具体的な実装テクニックを例に基づいて分析します。この記事では、Python での組み込み型のメソッドの実装について説明します。参考として、以下のようにみんなと共有してください:

はじめに 新しいタイプのオブジェクト メソッドを実装することに加えて、場合によっては、Python の組み込みタイプを拡張して、次のような他のタイプのデータ構造をサポートすることもできます。 lists キューの挿入と削除のメソッドを追加します。この問題に対応して、この記事では、コレクション関数の実装例を組み合わせて Python の組み込み型を拡張する 2 つの方法 (組み込み型の埋め込みによる型の拡張と、サブクラス化による型の拡張) を紹介します。

組み込み型の埋め込みによる拡張次の例では、リスト オブジェクトを埋め込み型として使用してコレクション オブジェクトを実装し、演算子のオーバーロードを追加します。このクラスは、Python のリストと追加の集合演算をラップします。

class Set:
  def __init__(self, value=[]): # Constructor
    self.data = [] # Manages a list
    self.concat(value)
  def intersect(self, other): # other is any sequence
    res = [] # self is the subject
    for x in self.data:
      if x in other: # Pick common items
        res.append(x)
    return Set(res) # Return a new Set
  def union(self, other): # other is any sequence
    res = self.data[:] # Copy of my list
    for x in other: # Add items in other
      if not x in res:
        res.append(x)
    return Set(res)
  def concat(self, value): # value: list, Set...
    for x in value: # Removes duplicates
      if not x in self.data:
        self.data.append(x)
  def __len__(self):     return len(self.data) # len(self)
  def __getitem__(self, key): return self.data[key] # self[i]
  def __and__(self, other):  return self.intersect(other) # self & other
  def __or__(self, other):  return self.union(other) # self | other
  def __repr__(self):     return 'Set:' + repr(self.data) # print()
if __name__ == '__main__':
  x = Set([1, 3, 5, 7])
  print(x.union(Set([1, 4, 7]))) # prints Set:[1, 3, 5, 7, 4]
  print(x | Set([1, 4, 6])) # prints Set:[1, 3, 5, 7, 4, 6]

サブクラスを通じて型を拡張する Python 2.2 以降、すべての組み込み型は list、str、dict、tuple などのサブクラスを直接作成できます。これにより、ユーザー定義のクラス ステートメントを通じて組み込み型をカスタマイズまたは拡張できます。つまり、型名をサブクラス化し、カスタマイズします。型のサブタイプ インスタンスは、元の組み込み型が表示される場所ならどこでも使用できます。

りー

以上がPython拡張組み込み型の実装方法の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。