Pythonのクラスメソッドとは何ですか?を読みました。しかし、その投稿の例は複雑です。Pythonのクラスメソッドの特定のユースケースの明確でシンプルな基本的な例を探しています。
Pythonクラスメソッドがその仕事に適したツールとなる小さな具体的なユースケースの例を挙げていただけますか?
Pythonのクラスメソッドとは何ですか?を読みました。しかし、その投稿の例は複雑です。Pythonのクラスメソッドの特定のユースケースの明確でシンプルな基本的な例を探しています。
Pythonクラスメソッドがその仕事に適したツールとなる小さな具体的なユースケースの例を挙げていただけますか?
初期化のためのヘルパー メソッド:
class MyStream(object):
@classmethod
def from_file(cls, filepath, ignore_comments=False):
with open(filepath, 'r') as fileobj:
for obj in cls(fileobj, ignore_comments):
yield obj
@classmethod
def from_socket(cls, socket, ignore_comments=False):
raise NotImplemented # Placeholder until implemented
def __init__(self, iterable, ignore_comments=False):
...
さて__new__
、かなり重要なクラスメソッドです。通常、インスタンスはここから取得されます
soはもちろんdict()
呼び出しdict.__new__
ますが、クラスメソッドである辞書を作成する別の便利な方法がありますdict.fromkeys()
例えば。
>>> dict.fromkeys("12345")
{'1': None, '3': None, '2': None, '5': None, '4': None}
わかりません、名前付きコンストラクターメソッドのようなものですか?
class UniqueIdentifier(object):
value = 0
def __init__(self, name):
self.name = name
@classmethod
def produce(cls):
instance = cls(cls.value)
cls.value += 1
return instance
class FunkyUniqueIdentifier(UniqueIdentifier):
@classmethod
def produce(cls):
instance = super(FunkyUniqueIdentifier, cls).produce()
instance.name = "Funky %s" % instance.name
return instance
使用法:
>>> x = UniqueIdentifier.produce()
>>> y = FunkyUniqueIdentifier.produce()
>>> x.name
0
>>> y.name
Funky 1
@classmethod
コードを使用するためにクラスのインスタンスを必要としない場合に、グローバル関数の作成を避けるために、コードの一部をクラスに関連付けるために最もよく使用することがわかりました。
たとえば、あるパターンに準拠している場合にのみキーが有効であると見なすデータ構造があるとします。クラスの内外からこれを使用したい場合があります。ただし、さらに別のグローバル関数を作成したくありません。
def foo_key_is_valid(key):
# code for determining validity here
return valid
このコードを、関連付けられているクラスでグループ化することをお勧めします。
class Foo(object):
@classmethod
def is_valid(cls, key):
# code for determining validity here
return valid
def add_key(self, key, val):
if not Foo.is_valid(key):
raise ValueError()
..
# lets me reuse that method without an instance, and signals that
# the code is closely-associated with the Foo class
Foo.is_valid('my key')
in class MyClass(object):
'''
classdocs
'''
obj=0
x=classmethod
def __init__(self):
'''
Constructor
'''
self.nom='lamaizi'
self.prenom='anas'
self.age=21
self.ville='Casablanca'
if __name__:
ob=MyClass()
print(ob.nom)
print(ob.prenom)
print(ob.age)
print(ob.ville)