私は 'アラーム'を定義するクラスを持っていて、次に 'httpalarm'を定義するクラスを持っています。今、httpalarmは、アラームのものと同じプロパティの多くを共有しています(実際には、すべて同じものとそれ以外のものがあります)。オブジェクトは親オブジェクトからプロパティを継承します
これらのプロパティをアラームオブジェクトの一部として一度定義してから、httpalarmをアラームの子として作成すると、すでにすべてのプロパティが取得されるはずです。しかし、それはしません。少なくとも、それは現れていません。私はアラームオブジェクトを作成するときに
class alarm(object):
def __init__(self, severity, name, eventId):
self.severity = severity
self.name = name
self.eventId eventId
class httpalarm(alarm):
def __init__(self, **kwargs):
self._dict__.update(kwargs)
は今、私は私が期待するものを手に入れる:
a = alarm('Critical', 'Name', '0x800111')
vars(a)
->
{'severity': 'Critical', 'name': 'Name', 'eventId': '0x800111'}
予想通りこれがあります。しかし、私がhttpalarmを作成するとき:
b = httpalarm(test = 'Test')
vars(b)
->
{'test': 'Test'}
これは予想外です。私は、httpalarm bに重大性、名前、およびeventId属性がすでに設定されていることを予期していました。いいえ、私は再びテストしhttpalarmに変更して再び
class alarm(object):
severity = 'Warning'
name = None
eventId = None
と;:
そうではなく、インスタンスのプロパティは、私はクラスのプロパティを使用するには、アラームクラスを設定します
c = httpalarm(test='Test')
vars(c)
->
{'test': 'Test'}
また、varsは他のすべてのプロパティを表示していません。しかし、彼らは次のように設定されています。
print c.severity
'Warning'
継承されたプロパティを印刷するように見えます。そして、オブジェクトが実際にここで起こっていただきました!私は本当にわからないんだけど、すべてのプロパティ
dir(c)
->
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'eventId', 'name', 'severity', 'test']
を返さない表示するにはDIR(C)を使用。同じプロパティを常に定義しなくて済むように継承できるアラームクラスを作成したいと思います。
d = httpalarm(severity = 'Critical', name = 'Name', eventId = '0x800111', test = 'test')
とhttpalarmインスタンスがすべてのアラームのプロパティだけでなく、独自のhttpalarmクラスからプロパティを含めるdは持っている:私は何を取得しようとしていることです。
編集:
class httpalarm(alarm):
def __init__(self,
**kwargs):
super(httpalarm, self).__init__()
for k,v in self.__dict__.iteritems():
if type(v) == tuple:
setattr(self, k, v[0])
self.__dict__.update(kwargs)