Mercurial > sypikslang
diff gamelib/lab.py @ 14:9d61abb3cfaf
Better subclass handling.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 06 May 2012 15:58:03 +0200 |
parents | b132a56ae4d4 |
children | 10d3db1f1e08 |
line wrap: on
line diff
--- a/gamelib/lab.py Sun May 06 15:56:22 2012 +0200 +++ b/gamelib/lab.py Sun May 06 15:58:03 2012 +0200 @@ -1,32 +1,13 @@ -from gamelib import research, products - - -def is_subclass(item, superclass): - return ( - isinstance(item, type) - and issubclass(item, superclass) - and not item is superclass) - +# -*- test-case-name: gamelib.tests.test_lab -*- -def list_products(): - for item in dir(products): - # Ugh! - item = getattr(products, item) - if is_subclass(item, products.Product): - yield item - - -def list_research(): - for item in dir(research): - # Ugh! - item = getattr(research, item) - if is_subclass(item, research.ResearchArea): - yield item +from gamelib import research, products class Lab(object): def __init__(self): self.science = [] + self.new_research = research.ResearchArea.__subclasses__() + self.new_products = products.Product.__subclasses__() def spend_points(self, things, basic_research): new_stuff = [] @@ -55,18 +36,14 @@ def find_new_products(self, research_area): available_products = [] - for product_class in list_products(): - if self._get_science(product_class): - continue + for product_class in self.new_products: if self._meet_requirements(product_class): available_products.append(product_class) return available_products def find_new_research(self, basic_research): available_research = [] - for research_class in list_research(): - if self._get_science(research_class): - continue + for research_class in self.new_research: if self._meet_requirements(research_class): available_research.append(research_class) return available_research