I do Java programming and recently started learning Python via the official documentation. I see that we can dynamically add data attributes to an instance object unlike in Java:
class House:
pass
my_house = House()
my_house.number = 40
my_house.rooms = 8
my_house.garden = 1
My question is, in what situ开发者_如何转开发ations is this feature used? What are the advantages and disadvantages compared to the way it is done in Java?
It can also be used when dynamically creating classes; see for instance this tutorial:
http://onlamp.com/pub/a/python/2003/04/17/metaclasses.html?page=1
or this one on Mix-ins, a programming technique that uses this capability to provide better encapsulation and modularity to object oriented code:
http://www.linuxjournal.com/article/4540
The first tutorial uses setattr(classname, "propertyname", value)
instead of the classname.property = value
syntax, but they are the same.
It's not often done from outside of the class unless the object is being used as a bucket of sorts. It's done an awful lot inside __init__()
of course, to provide values to attributes that will be used elsewhere.
Oh, and speaking of Java...
精彩评论