私のクラスのプライベート変数を抽象クラスにする正しい方法は何か知りたい。抽象クラスとしてプライベート変数を定義する
from abc import ABCMeta
class AbstractClass(ABCMeta):
__private_abstract_property = None # Needs this as private abstract class variable
# ... some functions
class ParentClass(AbstractClass): # inherits `AbstractClass`
# .. some more functions
class ChildClass1(ParentClass): # inherits `ParentClass`
__private_abstract_property = 'value1' # value to be initialized here
class ChildClass2(ParentClass): # inherits `ParentClass`
__private_abstract_property = 'value2'
正しい方法は何ですか:私のクラスの
- クラス変数
- プライベート
- 抽象
構造が似ている:私は私の変数の性質をまとめてみようこれを達成するには? Abstract Attributes in Pythonへの回答で述べたようにそれとも、
class AbstractClass(ABCMeta):
@abstractproperty
def __private_abstract_property(self):
...
を::
class AbstractClass(ABCMeta):
__private_abstract_property = NotImplemented
私は(このいずれかのアプローチを達成するための正しい方法を知りたい
一つの方法は、としてabc.abstractproperty
デコレータを使用することです私が言及したことから離れてさえ歓迎される)。
編集:ここではは私が何をしようとしています何のいくつかの説明です:
私はデータベースに関連するいくつかの集合演算を持つ管理者
AbstractClass
を持っています。私はこのクラスの直接のオブジェクトを望んでいないので、抽象的でなければなりません。また、定義のない関数をいくつか持っています。ParentClass
は、AbstractClass
に由来します。それはデータベースから特定の項目を取り出すことに関係するいくつかの機能セットを有するでしょう。このクラスも、やはり扱っているデータベースについて知らない。ChildClass
は、実際に対話する必要のあるデータベースエンジンを備えています。同じ種類の情報を保持する異なるエンジンが存在する可能性があるので、ここで接続名を設定し、この接続に基づいて、ParentClass
の関数はデータベースから情報を取得します。また、ChildClass
は、PythonでプライバシモデルはありませんParentClass
これは、[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように、JavaをPythonで記述しようとしたときに発生します。どのような課題を達成しようとしていますか? – TigerhawkT3
@ TigerhawkT3質問で編集しました –