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