Dec 11
08.05 special method 特殊方法
Python 使用 __
开头的名字来定义特殊的方法和属性,它们有:
- __init__()
: 构造方法
- __repr__()
- __str__()
- __call__()
- __iter__()
- __add__()
- __sub__()
- __mul__()
- __rmul__()
- __class__
- __name__
事实上,__new__()
才是真正产生新对象的方法,__init()__
只是对对象进行了初始化,所以 leaf = Leaf()
相当于:
my_new_leaf = Leaf.__new__(Leaf)
Leaf.__init__(my_new_leaf)
leaf = my_new_leaf
表示方法 repr() 和 str()
class Leaf(object):
def __init__(self, mass_mg):
self.mass_mg = mass_mg
# 这样 mass_oz 就变成属性了
@property
def mass_oz(self):
return self.mass_mg * 3.53e-5
这里mass_oz是一个只读不写的属性(注意是属性不是方法),而mass_mg是可读可写的属性。不过可以通过改变mass_mg的方法来改编mass_oz的值。(详细 def mass_oz
)
继承 inheritance
首先定义一个父类:
class Leaf(object):
def __init__(self, color="green"):
self.color = color
def fall(self):
print "Splat!"
定义一个子类继承自Leaf:(用class MapleLeaf(Leaf)
)
class MapleLeaf(Leaf):
def change_color(self):
if self.color == "green":
self.color = "red"
如果想对父类的方法进行修改,只需要在子类中重定义这个类即可(重写)。
super()函数
super(CurrentClassName, instance)
#返回该类实例对应的父类对象。
公有,私有和特殊方法,属性
- special 方法属性:即以__开头和结尾的方法和属性
- 私有方法和属性:即以__开头,不过不是真正私有,而是可以调用的
- 其他都是公有的方法和属性
- 以__开头不以__结尾的属性是更加特殊的方法,调用方式也不同
class MyClass(object):
def __init__(self):
print "I'm special!"
def _private(self):
print "I'm private!"
def public(self):
print "I'm public!"
def __really_special(self):
print "I'm really special!"
m = MyClass()
#I'm special!
m.public()
#I'm public!
m._private()
#I'm private!
m._MyClass__really_special()
#I'm really special!
多重继承
多重继承,指的是一个类别可以同时多于一个父类继承行为与特征的功能。python支持多重继承的。
class Leaf(object):
def __init__(self, color='green'):
self.color = color
class ColorChangingLeaf(Leaf):
def change(self, new_color='brown'):
self.color = new_color
class DeciduousLeaf(Leaf):
def fall(self):
print "Plunk!"
class MapleLeaf(ColorChangingLeaf, DeciduousLeaf):
pass
以上例子中,MapleLeaf就使用了多重继承,它可以使用两个父类的方法。
如果同时实现了不同的接口,那么最后使用的方法以继承的顺序为准,放在前面的优先继承。
class Leaf(object):
def __init__(self, color='green'):
self.color = color
class ColorChangingLeaf(Leaf):
def change(self, new_color='brown'):
self.color = new_color
def fall(self):
print "Spalt!"
class DeciduousLeaf(Leaf):
def fall(self):
print "Plunk!"
class MapleLeaf(ColorChangingLeaf, DeciduousLeaf):
pass
以上例子中,类ColorChangingLeaf和DeciduousLeaf都有方法”fall()”, 那就以第一个继承的ColorChangingLeaf为准。
更复杂的继承
class A(object):
pass
class B(A):
pass
class C(A):
pass
class C1(C):
pass
class B1(B):
pass
class D(B1, C):
pass
声明D的调用顺序:
[__main__.D, __main__.B1, __main__.B, __main__.C, __main__.A, object]
09 - 01. introduction and installation
Theano简介及其安装
Theano
是一个Python
科学计算库,允许我们进行符号运算,并在CPU
和GPU
上执行。
它最初由Montreal
大学的机器学习研究者们所开发,用来进行机器学习的计算。
按照官网上的说明,它拥有以下几个方面的特点:
- 与 Numpy, Scipy 的紧密结合
- GPU 加速
- 高效的符号计算
- 速度和稳定性
- 动态生成 C 代码