基本データマッチラスからそれを継承するものに値をアップグレードする方法を教えてください。
例(Python 3.7.2)
from dataclasses import dataclass
@dataclass
class Person:
name: str
smell: str = "good"
@dataclass
class Friend(Person):
# ... more fields
def say_hi(self):
print(f'Hi {self.name}')
friend = Friend(name='Alex')
f1.say_hi()
_
「こんにちはアレックス」を印刷する
random_stranger = Person(name = 'Bob', smell='OK')
_
random_strangerの復帰 "人(名前= 'bob'、香り= 'OK')"
Random_strangerを友達に変えるにはどうすればいいですか?
Friend(random_stranger)
_
「友達」(name = person(name = 'bob'、香り= 'OK')、香り= '良い') "
その結果、「友達(name = 'bob」、shield =' OK ')」を入手したいのですが。
Friend(random_stranger.name, random_stranger.smell)
_
働く、しかし、すべてのフィールドをコピーする必要がないのですか?
またはDataClassesから継承するクラスで@Dataclassデコレータを使用できないことは可能ですか?
vars(stranger)
は、DataClassインスタンスstranger
のすべての属性のDictを指定します。 DATACLassesのデフォルト__init__()
メソッドはキーワード引数を取ります。twin_stranger = Person(**vars(stranger))
は、値のコピーを持つ新しいインスタンスを作成します。 stranger_got_friend = Friend(**vars(stranger), city='Rome')
のような追加の引数を指定した場合、派生クラスも機能します。
from dataclasses import dataclass
@dataclass
class Person:
name: str
smell: str
@dataclass
class Friend(Person):
city: str
def say_hi(self):
print(f'Hi {self.name}')
friend = Friend(name='Alex', smell='good', city='Berlin')
friend.say_hi() # Hi Alex
stranger = Person(name='Bob', smell='OK')
stranger_got_friend = Friend(**vars(stranger), city='Rome')
stranger_got_friend.say_hi() # Hi Bob
_