| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- """
- Implements gametes, which are the result of
- splitting an organism's genome in two, and are
- used in the organism's sexual reproduction
- In our model, I don't use any concept of a chromosome.
- In biology, during a cell's interphase, there are
- no chromosomes as such - the genetic material
- is scattered chaotically throughout the cell nucleus.
- Chromosomes (from my limited knowledge of biologi)
- are mostly just a device used in cell division.
- Since division of cells in this model isn't
- constrained by the physical structure of the cell,
- we shouldn't need a construct of chromosomes.
- Gametes support the python '+' operator for sexual
- reproduction. Adding two gametes together produces
- a whole new Organism.
- """
- from xmlio import PGXmlMixin
- class Gamete(PGXmlMixin):
- """
- Contains a set of genes.
-
- Two gametes can be added together to form a
- new organism
- """
- def __init__(self, orgclass, **genes):
- """
- Creates a new gamete from a set of genes
- """
- self.orgclass = orgclass
- self.genes = dict(genes)
-
- def __getitem__(self, name):
- """
- Fetch a single gene by name
- """
- return self.genes[name]
-
- def __add__(self, other):
- """
- Combines this gamete with another
- gamete to form an organism
- """
- return self.conceive(other)
-
- def conceive(self, other):
- """
- Returns a whole new Organism class
- from the combination of this gamete with another
- """
- if not isinstance(other, Gamete):
- raise Exception("Trying to mate a gamete with a non-gamete")
-
- return self.orgclass(self, other)
-
|