The keyword __init__xattributes__
must contains
a list of XAttribute's. This keyword allows to define the
constructor of the class. You can access each attribute directly by
its name or by get and set methods. For instance, if an xattribute
has name internal_radius
, you can access it by internal_radius
,
getInternalRadius
and setInternalRadius
.
For instance:
# -- # Copyright (C) CEA, EDF # Author : Erwan ADAM (CEA) # -- import unittest from xdata import * class A(XObject): __init__xattributes__ = [ XAttribute("x", xtype=XInt(min=0)), ] pass class ATestCase(unittest.TestCase): def test__init__(self): self.failUnlessRaises(XAttributeError, A) self.failUnlessRaises(XAttributeError, A, 1, 2) self.failUnlessRaises(XAttributeError, A, y=2) a = A(1) a = A(x=3) return def test_accessors(self): a = A(0) self.failUnlessEqual(a.x, 0) self.failUnlessEqual(a.getX(), 0) a.x = 1 self.failUnlessEqual(a.x, 1) a.setX(2) self.failUnlessEqual(a.getX(), 2) a.x = "2+5+3" self.failUnlessEqual(a.x, 10) return def test_value(self): self.failUnlessRaises(XValueError, A, -1) self.failUnlessRaises(XValueError, A, "toto") a = A(0) self.failUnlessRaises(XValueError, a.setX, -1) self.failUnlessRaises(XValueError, a.__setattr__, "x", -1) self.failUnlessRaises(XValueError, setattr, a, "x", -1) return pass if __name__ == '__main__': unittest.main() pass
Of course, the value can be optional:
# -- # Copyright (C) CEA, EDF # Author : Erwan ADAM (CEA) # -- import unittest from xdata import * class A(XObject): __init__xattributes__ = [ XAttribute("x", default_value=0, xtype=XInt(min=0)), ] pass class ATestCase(unittest.TestCase): def test__init__(self): a = A() self.failUnlessEqual(a.x, 0) a = A(1) self.failUnlessEqual(a.x, 1) a = A(x=2) self.failUnlessEqual(a.x, 2) return pass if __name__ == '__main__': unittest.main() pass