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