<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Feb 12, 2017 at 11:51 AM, Markus Meskanen <span dir="ltr"><<a href="mailto:markusmeskanen@gmail.com" target="_blank">markusmeskanen@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="auto"><div>2. To register callbacks to objects, i.e. plain out set an attribute for an instance. I've used the menu example above:<br><br></div><span class="gmail-m_1234830925935979639gmail-"><div>  class Menu:</div><div>      def __init__(self, items=None, select_callback=None):</div><div>          self.items = items if items is not None else []</div><div>          self.select_callback = select_callback</div><div><br></div></span><div>  my_menu = Menu(['Pizza', 'Cake', 'Pasta'])</div><div>  def my_menu.select_callback(item_i<wbr>ndex):</div><div>      if item_index == 0:  # Pizza</div><div>          serve_food(pizza)</div><div>      else:  # Cake or Pasta</div><div>          ...</div><div><div style="font-size:12.8px">This is just one example of using it to set an instance's variable to a callback. It's just shorthand for:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">  def select_callback(item_index):</div><div style="font-size:12.8px">      ...</div><div style="font-size:12.8px">  my_menu.select_callback = select_callback</div></div></div></div></blockquote><div> </div><div>One issue that has been overlooked so far in this thread is that hypothetical use cases are not as important as real-world use cases. One way that PEPs can demonstrate real-world relevance is by demonstrating the effect on some important libraries, e.g. the standard library.<br></div><div><br></div><div>For example, asyncio.Future (and concurrent.futures.Future) has a list of callbacks and the API has add_done_callback() and remove_done_callback() functions for manipulating the callback list. The proposed syntax doesn't cooperate with these callbacks:<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">  f = asyncio.Future()</div><div class="gmail_extra"><br></div><div class="gmail_extra">  def my_callback(x):</div><div class="gmail_extra">    ...</div><div class="gmail_extra"><br></div><div class="gmail_extra">  f.add_done_callback(my_<wbr>callback)</div><div class="gmail_extra"><br></div><div class="gmail_extra">How should I write this using the proposed syntax? If the proposal doesn't generalize well enough to cover existing callback patterns in Python's own standard library, then that is a significant weakness.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">Please keep this in mind as you write the PEP.<br></div></div><div> </div></div></div></div>