KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Until like one hour ago, I was convinced that in python Foo ().bar () was nothing more than a short hand for Foo.bar (Foo () ) which passes the instance as first parameter. In this example the last two lines do (apparently) the same thing: class Foo (object): def bar (self): print "baz" qux = Foo () qux.bar () Foo.bar (qux) But now I have a class Animal that has a static method populate() that returns a list of all animals known to man. Also each instance of Animal has a method populate() that fills the properties of the instance with random values. #! /usr/bin/env python # -*- coding: utf-8 -*- import random animals = [ ("Bella", "cow"), ("Spike", "dog"), ("José", "iguana"), ("Tux", "penguin") ] class Animal (object): @staticmethod def populate (*args): return map (lambda x: Animal (*x), animals) def __init__ (self, name = None, species = None): def bar (): self.name, self.species = random.choice (animals) self.name = name self.species = species self.populate = bar def __repr__ (self): return "%s of species %s" % (self.name, self.species) print Animal.populate () print Animal ("Pinky", "mouse") qux = Animal () qux.populate () print qux The code works fine, but what made me suspicious was the fact that print Animal.populate (qux) called the static populate method (and hence returned a list and did not populate poor qux). So apparently my conviction that Foo ().bar () was nothing more than a short hand for Foo.bar (Foo () ) is wrong. This raises various questions for me: What happens when I call Foo ().bar () ? What happens when I call Foo.bar (Foo () ) ? Is there an internal difference between the both? Am I missing some fundamental concept of python? If you had to write a class whose static po
Tags (comma-separated)
Save Edits
Cancel