私はPythonには新しく、バイナリファイルから読み書きするコードを書いています。Pythonクラス "Main"値
私は、ファイルに格納されるすべてのタイプのデータのクラスを作成し、それらを整理しておくために、すべてが継承するクラスを作成しました。私は各クラスに、ファイルを読み書きするメソッドを持たせたいと思っています。しかし、InteriorIOを継承すると同時に、strやintのように振る舞い、値が返されるようにしたいので、最も近いものに応じて__str__
または__int__
のいずれかを変更します。
class InteriorIO(object):
__metaclass__ = ABCMeta
@abstractmethod
def read(this, f):
pass
@abstractmethod
def write(this, f):
pass
class byteIO(InteriorIO):
def __init__(this, value=None):
this.value = value
def read(this, f):
this.value = struct.unpack("B", f.read(1))[0]
def __str__:
return value;
class U16IO(InteriorIO):
def __init__(this, value=None):
this.value = value
def read(this, f):
this.value = struct.unpack("<H", f.read(2))[0]
def __int__:
return value;
# how I'd like it to work
f.open("C:/some/path/file.bin")
# In the file, the fileVersion is a U16
fileVersion = U16IO()
# We read the value from the file, storing it in fileVersion
fileVersion.read(f)
# writes the fileVersion that was just read from the file
print(str(fileVersion))
# now let's say we want to write the number 35 to the file in the form of a U16, so we store the value 35 in valueToWrite
valueToWrite = U16IO(35)
# prints the value 35
print(valueToWrite)
# writes the number 35 to the file
valueToWrite.write(f)
f.close()
下のコードは機能しますが、クラスは間違っていてあまりにも曖昧です。私はthis.value
を設定しています。これは、すべてのオブジェクトに対して、「主な」値の一種として、そして私が望むタイプとしてその値を返すランダムな名前です。
クラスがすべてInteriorIOから継承されるようにクラスを整理する最もクリーンな方法はありますが、値を返すという点でstrやintのように振る舞いますか?
私が既に知っていた値を書き込むためにU16IOで行ったような、RedCup/BlueCupにどのように値を渡すことができますか? – tomysshadow
@tomysshadow 'RedCup'と' BlueCup'は引き続きパラメータを受け入れることができるコンストラクタ(つまり '__init__')を持つことができます。ファクトリメソッドに渡された値によって、クラスを作成することを決定できますか?上記の例(私が追加したリファレンスから取ったもの)は最小ですが、コンストラクタとパラメータを渡すことができないというわけではありません。 – Rafael
コンストラクタのケースを含めるように答えを更新しました。それに渡される。 – Rafael