Ticket #359 (closed bug: fixed)

Opened 6 years ago

Last modified 5 years ago

__dict__ razreda orangeClassifier in dedovanje

Reported by: blaz Owned by: janez
Milestone: Future Component: library
Severity: immediate Keywords:
Cc: Blocking:
Blocked By:

Description

Spodnje dela tako kot bi moralo:

class A():
    def __init__(self, **kwds):
        self.__dict__ = kwds

x = A(a=10)
print x.a

a ce razred izpeljem iz orange.Classifier:

class B(orange.Classifier):
    def __init__(self, **kwds):
        self.__dict__ = kwds

y = B(a=10)
print y.a

zadeva crkne z

AttributeError: 'B' has no attribute 'a'
WARNING: Failure executing file: <0.py>

Kot kaze je zadeva prej delovala, saj so klasifikatorji v orngEnsemble.py napisani na ta nacin. Ti se sedaj zrusijo (npr. doc/modules/ensemble.py crkne).

Change History

comment:1 Changed 5 years ago by janez

  • Status changed from new to closed
  • Resolution set to fixed

Na ta način je bilo pisano povsod, vendar je to delovalo samo, dokler smo imeli razrede implementirane po starem (ali po novem, vendar narobe). Zdaj je dict fiksen atribut, ki se alocira v Cjevskem delu Orangea in ki ga ne moreš spremeniti. Pač pa lahko spremeniš njegovo vsebino.

Torej: namesto self.dict = kwds je potrebno pisati self.dict.update(kwds). Na ta način sem že popravil vso kodo v modulih in dokumentaciji.

Note: See TracTickets for help on using tickets.