Pythonでよく使われるクラスのいくつかの方法を紹介します
5282 ワード
組み込み方法の説明
__init__(self,...) オブジェクトを初期化し、新しいオブジェクトを作成するときに呼び出す
__del__(self)オブジェクトを解放し、オブジェクトが削除される前に呼び出す
__new__(cls,*args,**kwd)インスタンスの生成操作
__str__(self)print文の使用時に呼び出される
__getitem__(self,key)シーケンスのインデックスkeyに対応する値を取得し、seq[key]に等価である
__len__(self)インライン関数len()の呼び出し時に呼び出される
__cmp__(stc,dst)2つのオブジェクトのsrcとdstの比較
__getattr__(s,name)属性の値を取得する
__setattr__(s,name,value)属性の値を設定する
__delattr__(s,name)name属性を削除
__getattribute__() __getattribute__()機能と_getattr__()類似
__gt__(self,other)selfオブジェクトがotherオブジェクトより大きいか否かを判断する
__lt__(slef,other)selfオブジェクトがotherオブジェクトより小さいか否かを判断する
__ge__(slef,other)selfオブジェクトがotherオブジェクトより大きいか否かを判断する
__le__(slef,other)selfオブジェクトがotherオブジェクトより小さいか否かを判断する
__eq__(slef,other)selfオブジェクトがotherオブジェクトに等しいか否かを判断する
__call__(self,*args)インスタンスオブジェクトを関数として呼び出す
__init__():
__init__メソッドは、クラスのオブジェクトが作成されると、すぐに実行されます.この方法は、あなたのオブジェクトを初期化するために使用することができます.この名前の開始と終了は二重下線であることに注意してください.
コード例:
出力:
説明:_init__メソッドは、パラメータname(および通常のパラメータself)を取得するように定義されます.ここで_init__では、nameと呼ばれる新しいドメインを作成するだけです.同じ名前を持つにもかかわらず、2つの異なる変数であることに注意してください.ポイントは私たちにそれらを区別することができます.最も重要なのは、特別に呼び出していないことです.init__メソッドは、クラスの新しいインスタンスを作成するときに、パラメータをカッコ内に含めてクラス名の後ろに付いて、__を渡すだけです.init__方法.これはこの方法の重要な点である.今、私たちは私たちの方法でselfを使用することができます.nameドメイン.これはsayHi法で検証された.
__new__():
__new__()は_にありますinit__()インスタンスオブジェクトを生成するために呼び出す.この方法とクラス属性の特性を利用して、設計モードにおける一例のモードを実現することができる.単一モードとは、一意のオブジェクトを作成することですか?単一モード設計のクラスは、1つのオブジェクトしかインスタンス化できません.
__getattr__()、__setattr__()と_getattribute__():
オブジェクトのプロパティを読み込むとpythonは自動的に__を呼び出します.getattr__()方法例えばfruit.colorはfruit._に変換されますgetattr__(color).割り当て文を使用してプロパティを設定すると、pythonは自動的に__を呼び出します.setattr__()メソッド._getattribute__()の機能と_getattr__()同様に、属性の値を取得する.でも_getattribute__()より良い制御を提供することができ、コードがより丈夫である.pythonには存在しないことに注意してください.setattribute__()方法
コード例:
__getitem__():
クラスが属性をシーケンスとして定義する場合は、__を使用します.getitem__()シーケンス属性の要素を出力.果物屋さんでフルーツを何時間も販売しているとしたら、getitem__()フルーツショップの無種フルーツの入手方法
コード例:
出力:
__str__():
__str__()オブジェクトが表す意味を表す文字列を返す.実現しました_str__()メソッドの後、print文を直接使用してオブジェクトを出力したり、関数str()で__をトリガしたりすることができます.str__()の実行これにより、オブジェクトと文字列を関連付けることで、あるプログラムの実装が容易になり、この文字列でクラスを表すことができます.
コード例:
__call__():
クラスでの実装_call__()メソッドでは、オブジェクトの作成時に直接_を返すことができます.call__()の内容この方法を用いて静的方法をシミュレートできる
コード例:
__init__(self,...) オブジェクトを初期化し、新しいオブジェクトを作成するときに呼び出す
__del__(self)オブジェクトを解放し、オブジェクトが削除される前に呼び出す
__new__(cls,*args,**kwd)インスタンスの生成操作
__str__(self)print文の使用時に呼び出される
__getitem__(self,key)シーケンスのインデックスkeyに対応する値を取得し、seq[key]に等価である
__len__(self)インライン関数len()の呼び出し時に呼び出される
__cmp__(stc,dst)2つのオブジェクトのsrcとdstの比較
__getattr__(s,name)属性の値を取得する
__setattr__(s,name,value)属性の値を設定する
__delattr__(s,name)name属性を削除
__getattribute__() __getattribute__()機能と_getattr__()類似
__gt__(self,other)selfオブジェクトがotherオブジェクトより大きいか否かを判断する
__lt__(slef,other)selfオブジェクトがotherオブジェクトより小さいか否かを判断する
__ge__(slef,other)selfオブジェクトがotherオブジェクトより大きいか否かを判断する
__le__(slef,other)selfオブジェクトがotherオブジェクトより小さいか否かを判断する
__eq__(slef,other)selfオブジェクトがotherオブジェクトに等しいか否かを判断する
__call__(self,*args)インスタンスオブジェクトを関数として呼び出す
__init__():
__init__メソッドは、クラスのオブジェクトが作成されると、すぐに実行されます.この方法は、あなたのオブジェクトを初期化するために使用することができます.この名前の開始と終了は二重下線であることに注意してください.
コード例:
#!/usr/bin/python
# Filename: class_init.py
class Person:
def __init__(self, name):
self.name = name
def sayHi(self):
print 'Hello, my name is', self.name
p = Person('Swaroop')
p.sayHi()
出力:
Hello, my name is Swaroop
説明:_init__メソッドは、パラメータname(および通常のパラメータself)を取得するように定義されます.ここで_init__では、nameと呼ばれる新しいドメインを作成するだけです.同じ名前を持つにもかかわらず、2つの異なる変数であることに注意してください.ポイントは私たちにそれらを区別することができます.最も重要なのは、特別に呼び出していないことです.init__メソッドは、クラスの新しいインスタンスを作成するときに、パラメータをカッコ内に含めてクラス名の後ろに付いて、__を渡すだけです.init__方法.これはこの方法の重要な点である.今、私たちは私たちの方法でselfを使用することができます.nameドメイン.これはsayHi法で検証された.
__new__():
__new__()は_にありますinit__()インスタンスオブジェクトを生成するために呼び出す.この方法とクラス属性の特性を利用して、設計モードにおける一例のモードを実現することができる.単一モードとは、一意のオブジェクトを作成することですか?単一モード設計のクラスは、1つのオブジェクトしかインスタンス化できません.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Singleton(object):
__instance = None #
def __init__(self):
pass
def __new__(cls, *args, **kwd): # __init__
if Singleton.__instance is None: #
Singleton.__instance = object.__new__(cls, *args, **kwd)
return Singleton.__instance
__getattr__()、__setattr__()と_getattribute__():
オブジェクトのプロパティを読み込むとpythonは自動的に__を呼び出します.getattr__()方法例えばfruit.colorはfruit._に変換されますgetattr__(color).割り当て文を使用してプロパティを設定すると、pythonは自動的に__を呼び出します.setattr__()メソッド._getattribute__()の機能と_getattr__()同様に、属性の値を取得する.でも_getattribute__()より良い制御を提供することができ、コードがより丈夫である.pythonには存在しないことに注意してください.setattribute__()方法
コード例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Fruit(object):
def __init__(self, color = "red", price = 0):
self.__color = color
self.__price = price
def __getattribute__(self, name): #
return object.__getattribute__(self, name)
def __setattr__(self, name, value):
self.__dict__[name] = value
if __name__ == "__main__":
fruit = Fruit("blue", 10)
print fruit.__dict__.get("_Fruit__color") # color
fruit.__dict__["_Fruit__price"] = 5
print fruit.__dict__.get("_Fruit__price") # price
__getitem__():
クラスが属性をシーケンスとして定義する場合は、__を使用します.getitem__()シーケンス属性の要素を出力.果物屋さんでフルーツを何時間も販売しているとしたら、getitem__()フルーツショップの無種フルーツの入手方法
コード例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-class FruitShop:
def __getitem__(self, i): #
return self.fruits[i]
if __name__ == "__main__":
shop = FruitShop()
shop.fruits = ["apple", "banana"]
print shop[1]
for item in shop: #
print item,
出力:
banana
apple banana
__str__():
__str__()オブジェクトが表す意味を表す文字列を返す.実現しました_str__()メソッドの後、print文を直接使用してオブジェクトを出力したり、関数str()で__をトリガしたりすることができます.str__()の実行これにより、オブジェクトと文字列を関連付けることで、あるプログラムの実装が容易になり、この文字列でクラスを表すことができます.
コード例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Fruit:
'''Fruit ''' # Fruit
def __str__(self): #
return self.__doc__
if __name__ == "__main__":
fruit = Fruit()
print str(fruit) # str() __str__() , :Fruit
print fruit # fruit, __str__() , :Fruit
__call__():
クラスでの実装_call__()メソッドでは、オブジェクトの作成時に直接_を返すことができます.call__()の内容この方法を用いて静的方法をシミュレートできる
コード例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Fruit:
class Growth: #
def __call__(self):
print "grow ..."
grow = Growth() # Growth(), Growth , Fruit grow(),grow() __call__()
if __name__ == '__main__':
fruit = Fruit()
fruit.grow() # :grow ...
Fruit.grow() # :grow ...