dataclass abc
v0.0.8
データクラスの抽象プロパティを定義して、抽象基本クラス (ABC) とデータクラスの間のギャップを埋める Python ライブラリ。
pip を使用してライブラリをインストールします。
pip install dataclassabc
dataclassabc
デコレータを使用すると、データクラス内で抽象プロパティを使用できるようになります。これは、抽象基本クラス (ABC) で定義された抽象プロパティを解決し、派生データクラスのフィールドを通じてその実装を強制します。
基本クラスで抽象プロパティを定義し、それを派生データクラスで実装する方法は次のとおりです。
from abc import ABC , abstractmethod
from dataclassabc import dataclassabc
# Define an abstract base class with an abstract property
class A ( ABC ):
@ property
@ abstractmethod
def name ( self ) -> str : ...
# Use the dataclassabc decorator to implement the abstract property in a dataclass
@ dataclassabc ( frozen = True )
class B ( A ):
# Implementing the abstract property 'name'
name : str
dataclasses
モジュールの標準dataclass
デコレータを使用して抽象プロパティを実装すると、次に示すように TypeError が発生します。
from abc import ABC , abstractmethod
from dataclasses import dataclass
@ dataclass ( frozen = True )
class B ( A ):
name : str
# TypeError: Can't instantiate abstract class B without an implementation for abstract method 'name'
b = B ( name = 'A' )
抽象クラスの@property
および@name.setter
デコレーターを使用して、変更可能な抽象プロパティを定義できます。次の例は、可変プロパティを定義および設定する方法を示しています。
from abc import ABC , abstractmethod
from dataclassabc import dataclassabc
class A ( ABC ):
@ property
@ abstractmethod
def name ( self ) -> str : ...
@ name . setter
@ abstractmethod
def name ( self , val : str ): ...
@ dataclassabc
class B ( A ):
name : str
b = B ( name = 'A' )
# modify the mutable variable
b . name = 'B'
# Output will be b=B(name='B')
print ( f' { b = } ' )