Python has very intuitive and clear syntax, except when it comes to method
definitions, particularly dunder methods.
class Vec(object):
def __init__(self, x, y):
self.x, self.y = x, y
def __add__(self, other):
return Vec(self.x + other.x, self.y + other.y)
def __getitem__(self, key):
return self.x if key == 'x' else self.y if key == 'y' else None
def __contains__(self, item):
return self.x == item or self.y == item
def __bool__(self):
return self.x or self.y
def display(self):
print('x:', self.x, 'y:', self.y)
Having to declare a self parameter is confusing since you don't pass
anything in when you call the method on an instance (I am aware of bound
vs. unbound methods, etc. but a beginner would not be). The double
underscores are also confusing.
I propose syntactic sugar to make these method signatures more intuitive
and clean.
class Vec(object):
def class(x, y):
self.x, self.y = x, y
def self + other:
return Vec(self.x + other.x, self.y + other.y)
def self[key]:
return self.x if key == 'x' else self.y if key == 'y' else None
def item in self:
return self.x == item or self.y == item
def bool(self):
return self.x or self.y
def self.display():
print('x:', self.x, 'y:', self.y)
There are some immediate problems with this, such as `bool(self)` being
indistinguishable from a regular method signature and `class(x, y)` not
declaring the `self` identifier. These and other problems can be solved to
some extent, but I thought I would see if there is any interest around this
before going too in depth.
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/