Carlos Alberto Reis Ribeiro <cribeiro at mail.inet.com.br> writes: > >I'm not arguing against "programmer freedom". I'm arguing for > >features that reduce bugs without reducing power. > That's the point. Because of the way Python works, it is almost impossible > to implement any kind of "attribute checking". My own code is filled with > this kind of construct. You can build new classes on the fly, make > composite objects, a whole lot of things that are nearly impossible to do > using other statically typed languages. I'm not arguing that Python should be statically typed. Just that it is unfortunate that assignment automatically creates new variables. Creating a new variable and assigning to an existing variable should have been different operations. A language that makes you declare a variable before using it doesn't necessarily eliminate any power at all. It just might make you type a little bit more. Such extra typing in some cases is surely worth the extra safety, in my opinion. Especially, since the lack of safety in this case causes bugs that I see over and over again, and they are often not always trivial to track down. In the rare instances in which you want to set a variable even if it hasn't been created yet, you can do something like this: try: set x = 3 except NameError: let x = 3 > If you really think that this is a good idea (and I understand your > position for some particular cases), put some checks on the > __setattr__ of your class. It will trap all occurrences of new > attributes being attached to the class instance. This is a quick > example, by no means complete, that shows the concept: But this doesn't fix the even more serious problem with local variables. Also my coworkers would kill me if I was doing this kind of thing on all my classes, and it doesn't help when I have to work on their code. |>oug
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4