<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Sep 27, 2016 at 5:01 AM Nick Coghlan <<a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 27 September 2016 at 17:29, Neil Girdhar <<a href="mailto:mistersheik@gmail.com" target="_blank">mistersheik@gmail.com</a>> wrote:<br>
> On Friday, September 23, 2016 at 2:23:58 AM UTC-4, Nick Coghlan wrote:<br>
>> The difference between that and the "methods referring to the class<br>
>> they're defined in" case is that it's likely to be pretty normal to<br>
>> want to do the latter, so it may prove worthwhile to provide a cleaner<br>
>> standard spelling for it. The counter-argument is the general<br>
>> circularity one above: do you *really* need instances of the<br>
>> particular class being defined? Or is there a more permissive<br>
>> interface based type signature you could specify instead? Or perhaps<br>
>> no type signature at all, and let ducktyping sort it out implicitly at<br>
>> runtime?<br>
><br>
> I agree that circularity should in general be avoided, but it's not always<br>
> possible or elegant to do that.  Sometimes you really need two classes to<br>
> refer to each other. In that case, why not expose your placeholder idea to<br>
> the user via a library? You have one function that generates placeholder<br>
> singletons (generate_placeholder()), and another function to walks a class<br>
> object and replaces a placeholder with a given value<br>
> (replace_placeholder(placeholder, cls, value)).<br>
<br>
Because the general case is already covered by using a quoted string<br>
instead of a name reference. "I don't like using strings to denote<br>
delayed evaluation" isn't a compelling argument, which is why<br>
alternative ideas have to offer some other significant benefit, or<br>
else be incredibly simple both to implement and to explain.<br></blockquote><div><br></div><div>My motivation for something other than quoted strings is that there are other instances of circular dependencies.  Currently, when I am forced into a circular dependency, I import the later class in the member functions of the first:</div><div><br></div><div><div># module x</div><div>class X:</div><div>    def f(self):</div><div>        from y import Y</div><div>        # do something with Y</div><div><br></div><div># module y</div><div>class Y:</div><div>    pass</div></div><div><br></div><div>That's not ideal and I don't see how to extend this solution to use of "y" in class level definitions.</div><div><br></div><div>Best,</div><div><br></div><div>Neil</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Cheers,<br>
Nick.<br>
<br>
--<br>
Nick Coghlan   |   <a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>   |   Brisbane, Australia<br>
</blockquote></div></div>