Given the following code, one might expect the getter _get_bar to cause a TraitError, since the returned value (a string) is incompatible with the type declared in the Property (Int()). However, no TraitError is issued (or at least, not visibly).
The docs suggest that the intent is to validate:
you can define a Property trait by simply passing another trait. For example:
source = Property( Code )
This line defines a trait whose value is validated by the Code trait, and whose getter and setter methods are defined elsewhere on the same class.
I doubt that we could change the behaviour now without breaking lots of code, but we could at least update the documentation to be accurate.
Example code:
from traits.api import HasStrictTraits, Int, Property
class A(HasStrictTraits):
foo = Int()
bar = Property(Int(), observe="foo")
def _get_bar(self):
return "definitely not an integer"
a = A(foo=43)
print(a.bar)
Given the following code, one might expect the getter
_get_barto cause aTraitError, since the returned value (a string) is incompatible with the type declared in theProperty(Int()). However, noTraitErroris issued (or at least, not visibly).The docs suggest that the intent is to validate:
I doubt that we could change the behaviour now without breaking lots of code, but we could at least update the documentation to be accurate.
Example code: