Ruby can experience a similar problem[1], but that’s largely because its metaobject protocol draws no distinction between a read-only field and a zero-argument method. Python’s model does not have that issue (at the cost of significant complexity) and it is about as flexible as Ruby’s ultimately. (Python’s more rigid syntax is not relevant either way.)