{"id":3722,"date":"2016-02-21T15:30:18","date_gmt":"2016-02-21T20:30:18","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=3722"},"modified":"2016-02-21T15:37:27","modified_gmt":"2016-02-21T20:37:27","slug":"que-tienen-en-comun-los-candidatos-presidenciales-y-el-lenguaje-python-mucho-mas-de-lo-que-usted-cree","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2016\/02\/21\/que-tienen-en-comun-los-candidatos-presidenciales-y-el-lenguaje-python-mucho-mas-de-lo-que-usted-cree\/","title":{"rendered":"\u00bfQu\u00e9 tienen en com\u00fan los candidatos presidenciales y el lenguaje Python? Mucho m\u00e1s de lo que usted cree"},"content":{"rendered":"<p>Al menos Python es m\u00e1s f\u00e1cil de entender :-). Tambi\u00e9n me di\u00f3 un excusa para mostrarles un poco de herencia y otros trucos de objetos en el lenguaje:<\/p>\n<pre lang=\"python\">\r\n#!\/usr\/bin\/env python3\r\n# A little fun with the candidates for the US presidency for 2016 election year\r\n# @author josevnz@kodegeek.com\r\n#\r\nclass Candidate:\r\n    \r\n    def __init__(self, name, party, sex=\"F\", age=18):\r\n        self.__name = name\r\n        self.__party = party\r\n        self.__sex = \"F\" if sex not in [\"M\", \"F\"] else sex\r\n        self.__age = 18 if not (18 < = age <= 120) else age\r\n    \r\n    @property\r\n    def name(self):\r\n        return self.__name\r\n    \r\n    @property\r\n    def party(self):\r\n        return self.__party\r\n    \r\n    @property\r\n    def sex(self):\r\n        return self.__sex\r\n    \r\n    @property\r\n    def age(self):\r\n        return self.__age\r\n    \r\n    def __hash__(self):\r\n        return hash(id(self))\r\n    \r\n    def __str__(self):\r\n        return \"Candidate=[name={0}, party={1}, sex={2}, age={3}]\".format(\r\n                                                                      self.__name,\r\n                                                                      self.__party,\r\n                                                                      self.__sex,\r\n                                                                      self.__age\r\n                                                                      )\r\n    \r\n    def __repr__(self):\r\n        return \"{0}{1}{2}{3}{4}\".format(\r\n                                        self.__class__.__name__, \r\n                                        self.__name, \r\n                                        self.__party, \r\n                                        self.__sex, \r\n                                        self.__age\r\n                                        )\r\n    \r\n    def __invert__(self):\r\n        raise NotImplemented()\r\n    \r\n    # Are you a Democrat?    \r\n    def __bool__(self):\r\n        raise NotImplemented()\r\n    \r\n    def __lt__(self, other):\r\n        return self.__age < other.__age\r\n    \r\n    def __gt__(self, other):\r\n        return self.__age > other.__age\r\n    \r\n    def __eq__(self, other):\r\n        return (\r\n                self.__age == other.__age and \r\n                self.__name == other.__name and \r\n                self.__party == other.__party and \r\n                self.__sex == other.__sex\r\n                )\r\n\r\nclass Republican(Candidate):\r\n    \r\n    def __init__(self, name, sex=\"F\", age=21):\r\n        return super().__init__(name, \"Republican party\", sex, age)\r\n    \r\n    def __bool__(self):\r\n        return False\r\n    \r\n    def __invert__(self):\r\n        raise NotImplementedError()\r\n            \r\nclass Democrat(Candidate):\r\n    \r\n    def __init__(self, name, sex=\"F\", age=21):\r\n        return super().__init__(name, \"Democratic party\", sex, age)\r\n    \r\n    def __bool__(self):\r\n        return True\r\n    \r\n    def __invert__(self):\r\n        raise NotImplementedError()\r\n    \r\nif __name__ == \"__main__\":\r\n        candidates = []\r\n        candidates.append(Democrat(\"Hillary Clinton\", \"F\", 68))\r\n        candidates.append(Republican(\"Donald Trump\", \"M\", 70))\r\n        candidates.append(Democrat(\"Bernie Sanders\", \"M\", 75))\r\n        candidates.append(Republican(\"Marco Rubio\", \"M\", 45))\r\n        for candidate in sorted(candidates, reverse=True):\r\n            isDemocrat = \"yes\" if candidate else \"no\"\r\n            print(\"Candidate: {0}, democrat? {1}\".format(candidate, isDemocrat))        \r\n<\/pre>\n<p>And the output for this run:<\/p>\n<pre lang=\"Bash\">\r\nCandidate: Candidate=[name=Bernie Sanders, party=Democratic party, sex=M, age=75], democrat? yes\r\nCandidate: Candidate=[name=Donald Trump, party=Republican party, sex=M, age=70], democrat? no\r\nCandidate: Candidate=[name=Hillary Clinton, party=Democratic party, sex=F, age=68], democrat? yes\r\nCandidate: Candidate=[name=Marco Rubio, party=Republican party, sex=M, age=45], democrat? no\r\n<\/pre>\n<p>Ahora si s\u00f3lo pudiera escribir algo tan sencillo como esto para saber los resultados de las elecciones del 2016 \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Al menos Python es m\u00e1s f\u00e1cil de entender :-). Tambi\u00e9n me di\u00f3 un excusa para mostrarles un poco de herencia y otros trucos de objetos en el lenguaje: #!\/usr\/bin\/env python3 # A little fun with the candidates for the US presidency for 2016 election year # @author josevnz@kodegeek.com # class Candidate: def __init__(self, name, party, <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2016\/02\/21\/que-tienen-en-comun-los-candidatos-presidenciales-y-el-lenguaje-python-mucho-mas-de-lo-que-usted-cree\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[239],"tags":[784,782,765,783],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/3722"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=3722"}],"version-history":[{"count":8,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/3722\/revisions"}],"predecessor-version":[{"id":3730,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/3722\/revisions\/3730"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=3722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=3722"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=3722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}