Or a namedtuple, if you wanted to have access to the x and y fields as named attributes.
The article actually does mention this, but only in a footnote, and the footnote gets the facts wrong:
"One would be right to argue that collections.namedtuple() is even closer to C struct than this. Let’s not overcomplicate things, however. The point I’m trying to make is valid regardless."
No, it isn't, because a namedtuple does not work the same under the hood as the straightforward class definition he gives. If p = Point(0, 0) is a namedtuple instance, and you do p.x or p.y, what actually happens is that the "attribute" is looked up by index, which is equivalent to a C struct field access.
Has that changed?
Yes, you're right, I was mistaken about how namedtuples work under the hood.