Object-oriented-python-object-oriented-shortcuts

提供:Dev Guides
移動先:案内検索

オブジェクト指向のショートカット

この章では、Pythonのさまざまな組み込み関数、ファイルI/O操作、オーバーロードの概念について詳しく説明します。

Python組み込み関数

Pythonインタープリターには、すぐに使用できる組み込み関数と呼ばれる多くの関数があります。 その最新バージョンでは、Pythonには以下の表にリストされている68個の組み込み関数が含まれています-

組み込み関数

abs()

dict()

助けて()

min()

setattr()

すべて()

dir()

hex()

次()

スライス()

どれか()

divmod()

id()

object()

ソート済み()

ascii()

enumerate()

入力()

oct()

staticmethod()

bin()

eval()

int()

開いた()

str()

bool()

exec()

isinstance()

ord()

和()

bytearray()

フィルタ()

issubclass()

捕虜()

スーパー()

bytes()

浮く()

iter()

print()

tuple()

callable()

フォーマット()

len()

property()

タイプ()

chr()

frozenset()

リスト()

範囲()

vars()

classmethod()

getattr()

locals()

repr()

zip()

コンパイル()

globals()

地図()

reverse()

インポート()

complex()

hasattr()

max()

円形()

delattr()

ハッシュ()

memoryview()

セット()

このセクションでは、いくつかの重要な機能について簡単に説明します-

len()関数

len()関数は、文字列、リスト、またはコレクションの長さを取得します。 オブジェクトのアイテムの長さまたは数を返します。オブジェクトには文字列、リスト、またはコレクションを指定できます。

>>> len(['hello', 9 , 45.0, 24])
4

len()関数は、* list .len()または tuple .len()*のように内部的に機能します。 したがって、len()は* len()*メソッドを持つオブジェクトでのみ機能することに注意してください。

>>> set1
{1, 2, 3, 4}
>>> set1.__len__()
4

ただし、実際には、次の理由により、* len()関数の代わりに len()*を好みます-

  • もっと効率的です。 また、lenなどの特別なメソッドへのアクセスを拒否するために特定のメソッドを記述する必要はありません。
  • 保守が簡単です。
  • 下位互換性をサポートします。

逆転(seq)

逆反復子を返します。 seqは、reversed()メソッドを持つか、シーケンスプロトコル(len()メソッドとgetitem()メソッド)をサポートするオブジェクトでなければなりません。 通常、アイテムを後ろから前にループする場合の for ループで使用されます。

>>> normal_list = [2, 4, 5, 7, 9]
>>>
>>> class CustomSequence():
   def __len__(self):
      return 5
   def __getitem__(self,index):
      return "x{0}".format(index)
>>> class funkyback():
   def __reversed__(self):
      return 'backwards!'
>>> for seq in normal_list, CustomSequence(), funkyback():
      print('\n{}: '.format(seq.__class__.__name__), end="")
      for item in reversed(seq):
         print(item, end=", ")

最後のforループは、通常のリストの逆のリストと、2つのカスタムシーケンスのインスタンスを出力します。 出力は、これら3つすべてで* reversed()が機能することを示していますが、 *reversed を定義すると、結果が大きく異なります。

出力

上記のコードを実行すると、次の出力を確認できます-

list: 9, 7, 5, 4, 2,
CustomSequence: x4, x3, x2, x1, x0,
funkyback: b, a, c, k, w, a, r, d, s, !,

列挙する

  • enumerate()*メソッドは、反復可能オブジェクトにカウンターを追加し、列挙オブジェクトを返します。

enumerate()の構文は-

enumerate(iterable, start = 0)

ここで、2番目の引数 start はオプションであり、デフォルトではインデックスはゼロ(0)で始まります。

>>> # Enumerate
>>> names = ['Rajesh', 'Rahul', 'Aarav', 'Sahil', 'Trevor']
>>> enumerate(names)
<enumerate object at 0x031D9F80>
>>> list(enumerate(names))
[(0, 'Rajesh'), (1, 'Rahul'), (2, 'Aarav'), (3, 'Sahil'), (4, 'Trevor')]
>>>

したがって、* enumerate()*は、渡されたシーケンス内の要素のカウントを保持するタプルを生成する反復子を返します。 戻り値はイテレータなので、直接アクセスすることはあまり役に立ちません。 enumerate()のより良いアプローチは、forループ内でカウントを維持することです。

>>> for i, n in enumerate(names):
   print('Names number: ' + str(i))
   print(n)
Names number: 0
Rajesh
Names number: 1
Rahul
Names number: 2
Aarav
Names number: 3
Sahil
Names number: 4
Trevor

標準ライブラリには他の多くの関数があり、ここにいくつかのより広く使用される関数の別のリストがあります-

  • hasattr、getattr、setattr 、および delattr 。オブジェクトの属性を文字列名で操作できます。
  • all および* any、反復可能なオブジェクトを受け入れ、すべてまたは一部のアイテムがtrueと評価された場合に *True を返します。
  • * nzip、*は、2つ以上のシーケンスを取り、タプルの新しいシーケンスを返します。各タプルには、各シーケンスからの単一の値が含まれます。

ファイル入出力

ファイルの概念は、オブジェクト指向プログラミングという用語に関連付けられています。 Pythonは、オペレーティングシステムが抽象的に提供するインターフェイスをラップして、ファイルオブジェクトを操作できるようにしました。

  • open()*組み込み関数は、ファイルを開いてファイルオブジェクトを返すために使用されます。 それは2つの引数を持つ最も一般的に使用される関数です-
open(filename, mode)

open()関数は2つの引数を呼び出します。1つ目はファイル名で、2つ目はモードです。 ここで、モードは読み取り専用モードの場合は 'r'、書き込み専用の場合は 'w'(同じ名前の既存のファイルは消去されます)、および 'a’は追加のためにファイルを開き、ファイルに書き込まれたデータは自動的に追加されます最後まで。 「r +」は、読み取りと書き込みの両方のためにファイルを開きます。 デフォルトのモードは読み取り専用です。

Windowsでは、モードに「b」を追加すると、ファイルがバイナリモードで開かれるため、「rb」、「wb」、「r + b」などのモードもあります。

>>> text = 'This is the first line'
>>> file = open('datawork','w')
>>> file.write(text)
22
>>> file.close()

場合によっては、既存のファイルを完全に上書きするのではなく、ファイルの最後に追加するために、値 'a’をモード引数として指定できるため、既存のファイルを上書きするのではなく、単に追加したいだけです。内容。

>>> f = open('datawork','a')
>>> text1 = ' This is second line'
>>> f.write(text1)
20
>>> f.close()

ファイルを読み取り用に開いたら、read、readline、またはreadlinesメソッドを呼び出してファイルの内容を取得できます。 readメソッドは、2番目の引数が「b」であるかどうかに応じて、ファイルのコンテンツ全体をstrまたはbytesオブジェクトとして返します。

読みやすくするため、また一度に大きなファイルを読み取らないようにするために、ファイルオブジェクトで直接forループを使用することをお勧めします。 テキストファイルの場合、各行を一度に1つずつ読み取り、ループ本文内で処理できます。 ただし、バイナリファイルの場合は、read()メソッドを使用して固定サイズのデータ​​チャンクを読み取り、読み取る最大バイト数のパラメーターを渡すことをお勧めします。

>>> f = open('fileone','r+')
>>> f.readline()
'This is the first line. \n'
>>> f.readline()
'This is the second line. \n'

ファイルオブジェクトのwriteメソッドを使用してファイルに書き込むと、文字列(バイナリデータのバイト)オブジェクトがファイルに書き込まれます。 writelinesメソッドは一連の文字列を受け入れ、各反復値をファイルに書き込みます。 writelinesメソッドは、シーケンス内の各アイテムの後に新しい行を追加しません。

最後に、ファイルの読み取りまたは書き込みが終了したときにclose()メソッドを呼び出して、バッファリングされた書き込みがディスクに書き込まれ、ファイルが適切にクリーンアップされ、ファイルに関連付けられたすべてのリソースが解放されるようにしますオペレーティングシステム。 close()メソッドを呼び出す方が適切ですが、技術的には、スクリプトが存在するときに自動的に行われます。

メソッドのオーバーロードの代替

メソッドのオーバーロードとは、異なる引数セットを受け入れる同じ名前の複数のメソッドを持つことを指します。

単一のメソッドまたは関数を指定すると、パラメーターの数を自分で指定できます。 関数の定義に応じて、0、1、2、またはそれ以上のパラメーターで呼び出すことができます。

class Human:
   def sayHello(self, name = None):
      if name is not None:
         print('Hello ' + name)
      else:
         print('Hello ')

#Create Instance
obj = Human()

#Call the method, else part will be executed
obj.sayHello()

#Call the method with a parameter, if part will be executed
obj.sayHello('Rahul')

出力

Hello
Hello Rahul

デフォルトの引数

関数もオブジェクトです

呼び出し可能オブジェクトとは、オブジェクトがいくつかの引数を受け入れることができ、場合によってはオブジェクトを返すことです。 関数はPythonで最も単純な呼び出し可能なオブジェクトですが、クラスや特定のクラスインスタンスのようなものもあります。

Pythonのすべての関数はオブジェクトです。 オブジェクトにはメソッドまたは関数を含めることができますが、オブジェクトは関数である必要はありません。

def my_func():
   print('My function was called')
my_func.description = 'A silly function'
def second_func():

   print('Second function was called')

   second_func.description = 'One more sillier function'

def another_func(func):
   print("The description:", end=" ")
   print(func.description)
   print('The name: ', end=' ')
   print(func.__name__)
   print('The class:', end=' ')
   print(func.__class__)
   print("Now I'll call the function passed in")
   func()

another_func(my_func)
another_func(second_func)

上記のコードでは、2つの異なる関数を3番目の関数に引数として渡し、それぞれに対して異なる出力を取得できます-

The description: A silly function
The name: my_func
The class:
Now I'll call the function passed in
My function was called
The description: One more sillier function
The name: second_func
The class:
Now I'll call the function passed in
Second function was called

呼び出し可能オブジェクト

関数が属性を設定できるオブジェクトであるように、関数であるかのように呼び出すことができるオブジェクトを作成することができます。

Pythonでは、call()メソッドを持つオブジェクトは、関数呼び出し構文を使用して呼び出すことができます。