Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Duck( object ):
- pass
- class Farm:
- ducks = []
- def addDuck(self, duck):
- getattr(duck, 'fly')
- getattr(duck, 'quack')
- getattr(duck, 'swim')
- self.ducks.append(duck)
- print "Add a duck"
- aRealDuck = Duck()
- setattr(aRealDuck, 'fly', 1)
- setattr(aRealDuck, 'quack', 1)
- setattr(aRealDuck, 'swim', 1)
- setattr(aRealDuck, 'feathers', 1)
- aFakeDuckWithoutFeathers = Duck()
- setattr(aFakeDuckWithoutFeathers, 'fly', 1)
- setattr(aFakeDuckWithoutFeathers, 'quack', 1)
- setattr(aFakeDuckWithoutFeathers, 'swim', 1)
- f = Farm()
- f.addDuck(aRealDuck)
- f.addDuck(aFakeDuckWithoutFeathers) # No error!!!!
- # ... 15.000 lines and 2 years later, ducks go to slaughter ...
- class Slaughter:
- feathers = 0
- def cleanDuck(self, duck):
- self.removeFeathers(duck)
- print "Duck dead =("
- def removeFeathers(self, duck):
- getattr(duck, 'feathers')
- self.feathers += duck.feathers
- duck.feathers = 0
- print "Feathers removed"
- s = Slaughter()
- for c in f.ducks:
- s.cleanDuck(c) # Crash...
- #Add a duck
- #Add a duck
- #Feathers removed
- #Duck dead =(
- #Traceback (most recent call last):
- # File "/home/nicolas/duck.py", line 48, in <module>
- # s.cleanDuck(c) # Crash...
- # File "/home/nicolas/duck.py", line 36, in cleanDuck
- # self.removeFeathers(duck)
- # File "/home/nicolas/duck.py", line 40, in removeFeathers
- # getattr(duck, 'feathers')
- # AttributeError: 'Duck' object has no attribute 'feathers'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement