On Fri, 2007-03-16 at 01:00 +1100, Edward d'Auvergne wrote: > On 3/15/07, Chris MacRaild <[EMAIL PROTECTED]> wrote: > > On Thu, 2007-03-15 at 00:09 +1100, Edward d'Auvergne wrote: > > > On 3/14/07, Chris MacRaild <[EMAIL PROTECTED]> wrote: > > > > On Tue, 2007-03-13 at 19:51 +1100, Edward d'Auvergne wrote: > > > > > Gary, > > > > > > > > > > I've written some unit tests which are located in the file > > > > > 'test_suite/unit_tests/data/__init__.py'. Would you know what > > > > > modifications I need to apply to make these tests run? These tests > > > > > are for the methods of the Data singleton class (the relax data > > > > > storage object) which is located in 'data/__init__.py'. I haven't > > > > > used the statement 'from x import Data' for this class so it is the > > > > > legal and ubiquitous usage of an __init__.py file. Would > > > > > 'unit_test_runner.py' handle this code? > > > > > > > > > > Thanks, > > > > > > > > > > Edward > > > > > > > > > > > > > > > P.S. These tests demonstrate the utility of subclassing the singleton > > > > > and is one reason I was arguing for the use of the class import rather > > > > > than reference import. > > > > > > > > > > > > > It is of course correct that the Singleton implimentation I proposed > > > > does not allow for subclassing. This however might well be seen as a > > > > design feature, given the well known conceptual problems with > > > > subclassing Singleton. Essentially, subclassing violates the Singleton > > > > Design Pattern: > > > > > > > > class Singleton: > > > > def __new__(self): > > > > ... > > > > > > > > class Sub(Singleton): pass > > > > > > > > >>> a = Singleton() > > > > >>> b = Sub() > > > > >>> isinstance(a,Singleton) > > > > True > > > > >>> isinstance(b,Singleton) > > > > True > > > > >>> a is b > > > > False > > > > >>> a == b > > > > False > > > > > > > > ie. we have 2 instances of Singleton that are not the same thing, and > > > > not even equal! If this is the behaviour you want, then you need > > > > something other than Singleton. On the other hand, if you really want > > > > Singleton, then you can't also hope for subclassability. > > > > > > Actually one is an instance of Singleton and the other is an instance > > > of Sub. > > > > The definition of inheritance is that an instance of the subclass is > > also an instance of the parent class. ie. b is an instance of both Sub > > and Singleton. Inheritance from a Singleton class is therefore a logical > > contradiction. > > That is actually incorrect!
Sorry to drag this on, but I'm not incorrect here, and its a fairly fundamental point of OO philosophy and practice that is well worth getting right. This is pasted directly from my Python command line (the interpreter does not lie!): >>> class A: pass ... >>> class B(A): pass ... >>> a= A() >>> b = B() >>> isinstance(a,A) True >>> isinstance(a,B) False >>> isinstance(b,B) True >>> isinstance(b,A) True Because B is a subclass of A, all instances of B are also instances of A > The purpose of inheritance and having a > subclass is to define a common set of operations and behaviours of an > object (the singleton property is a behaviour). The derived classes > then expand on these properties differently for each new object. Each > derived class is then a new and different instance, even if they are > singletons. If two instances of the same derived singleton class are > made, then these will be same reference. More info about inheritance > is given at http://en.wikipedia.org/wiki/Inheritance_(computer_science). > > > > My vote is for B > > As the vote is 2 for B and 1 for A, option B will be adopted. Chris, > would you like to make the necessary modifications? The file > 'data/__init__.py' will need to be modified. In addition all the > import statements of the relax data storage object in all the relax > modules will need to be changed. A few of the unit tests in the file > 'test_suite/unit_tests/data/test___init__.py' need to be redesigned as > these test the methods of the relax data storage singleton by creating > a new singleton object, with the same properties as the storage > singleton, as a derived class. > Sure, I'll give it a shot. Chris > Cheers, > > Edward > _______________________________________________ relax (http://nmr-relax.com) This is the relax-devel mailing list [email protected] To unsubscribe from this list, get a password reminder, or change your subscription options, visit the list information page at https://mail.gna.org/listinfo/relax-devel

