Skip to content

Latest commit

 

History

History
560 lines (477 loc) · 25.8 KB

109.md

File metadata and controls

560 lines (477 loc) · 25.8 KB

super() 函数

super(CurrentClassName, instance) 

返回该类实例对应的父类对象。

In [1]:

class Leaf(object):
    def __init__(self, color="green"):
        self.color = color
    def fall(self):
        print "Splat!"

class MapleLeaf(Leaf):
    def change_color(self):
        if self.color == "green":
            self.color = "red"
    def fall(self):
        self.change_color()
        super(MapleLeaf, self).fall()

这里,我们先改变树叶的颜色,然后再找到这个实例对应的父类,并调用父类的 fall() 方法:

In [2]:

mleaf = MapleLeaf()

print mleaf.color
mleaf.fall()
print mleaf.color
green
Splat!
red

回到我们的森林例子,这里我们将森林 Forest 作为父类,并定义一个子类 BurnableForest

In [3]:

import numpy as np

class Forest(object):
    """ Forest can grow trees which eventually die."""
    def __init__(self, size=(150,150), p_sapling=0.0025):
        self.size = size
        self.trees = np.zeros(self.size, dtype=bool)
        self.p_sapling = p_sapling

    def __repr__(self):
        my_repr = "{}(size={})".format(self.__class__.__name__, self.size)
        return my_repr

    def __str__(self):
        return self.__class__.__name__

    @property
    def num_cells(self):
        """Number of cells available for growing trees"""
        return np.prod(self.size)

    @property
    def tree_fraction(self):
        """
 Fraction of trees
 """
        num_trees = self.trees.sum()
        return float(num_trees) / self.num_cells

    def _rand_bool(self, p):
        """
 Random boolean distributed according to p, less than p will be True
 """
        return np.random.uniform(size=self.trees.shape) < p

    def grow_trees(self):
        """
 Growing trees.
 """
        growth_sites = self._rand_bool(self.p_sapling)
        self.trees[growth_sites] = True    

    def advance_one_step(self):
        """
 Advance one step
 """
        self.grow_trees()
  • 将与燃烧相关的属性都被转移到了子类中去。
  • 修改两类的构造方法,将闪电概率放到子类的构造方法上,同时在子类的构造方法中,用 super 调用父类的构造方法。
  • 修改 advance_one_step(),父类中只进行生长,在子类中用 super 调用父类的 advance_one_step() 方法,并添加燃烧的部分。

In [4]:

class BurnableForest(Forest):
    """
 Burnable forest support fires
 """    
    def __init__(self, p_lightning=5.0e-6, **kwargs):
        super(BurnableForest, self).__init__(**kwargs)
        self.p_lightning = p_lightning        
        self.fires = np.zeros((self.size), dtype=bool)

    def advance_one_step(self):
        """
 Advance one step
 """
        super(BurnableForest, self).advance_one_step()
        self.start_fires()
        self.burn_trees()

    @property
    def fire_fraction(self):
        """
 Fraction of fires
 """
        num_fires = self.fires.sum()
        return float(num_fires) / self.num_cells

    def start_fires(self):
        """
 Start of fire.
 """
        lightning_strikes = (self._rand_bool(self.p_lightning) & 
            self.trees)
        self.fires[lightning_strikes] = True

    def burn_trees(self):
        """
 Burn trees.
 """
        fires = np.zeros((self.size[0] + 2, self.size[1] + 2), dtype=bool)
        fires[1:-1, 1:-1] = self.fires
        north = fires[:-2, 1:-1]
        south = fires[2:, 1:-1]
        east = fires[1:-1, :-2]
        west = fires[1:-1, 2:]
        new_fires = (north | south | east | west) & self.trees
        self.trees[self.fires] = False
        self.fires = new_fires

测试父类:

In [5]:

forest = Forest()

forest.grow_trees()

print forest.tree_fraction
0.00284444444444

测试子类:

In [6]:

burnable_forest = BurnableForest()

调用自己和父类的方法:

In [7]:

burnable_forest.grow_trees()
burnable_forest.start_fires()
burnable_forest.burn_trees()
print burnable_forest.tree_fraction
0.00235555555556

查看变化:

In [8]:

import matplotlib.pyplot as plt

%matplotlib inline

forest = Forest()
forest2 = BurnableForest()

tree_fractions = []

for i in range(2500):
    forest.advance_one_step()
    forest2.advance_one_step()
    tree_fractions.append((forest.tree_fraction, forest2.tree_fraction))

plt.plot(tree_fractions)

plt.show()

![](data:image/png;base64,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 )

__str____repr__self.__class__ 会根据类型不同而不同:

In [9]:

forest

Out[9]:

Forest(size=(150, 150))

In [10]:

forest2

Out[10]:

BurnableForest(size=(150, 150))

In [11]:

print forest
Forest

In [12]:

print forest2
BurnableForest