class 定义
每种方法function第一个参数都是self,之后的参数才是真正的输入参数!!
self之后所有定义的方法都可以使用,引用规则还是要加self.xxx
一定别忘class中每个函数都要有self参数!!!!
注意:在init定义的时候才会有self(不论是变量还是函数)
其他def中引用就用self.
class box:
def __init__(self, name, age):
self.name = name
self.age = age
box1 = box("joe", 18)
box2 = box("tes", 14)
self 是一个形式参数,就是实例化的那个变量 box1/box2,就是类的实例。函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self。去掉self后,那种写法所使用到的变量,实际上不是你所希望的,不是真正的实例中的变量和函数
但是如果是class中的方法在进行调用self变量时就要用self.var
class Foo:
def __init__(self, name, age):
self.name = name
self.age = age
def detail(self):
print(self.name)
print(self.age)
obj1 = Foo('chengd', 18)
obj1.detail() # Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 chengd ;self.age 是 18
注意看,__init__中的参数(self, xx, xx…)就是class进行实例化中的传入参数!
类在实例化后必然执行__init__中的内容
子类可以继承父类特性,并且可以予以重写,
class 动物:
def 吃(self):
# do something
def 喝(self):
# do something
def 拉(self):
# do something
def 撒(self):
# do something
# 在类后面括号中写入另外一个类名,表示当前类继承另外一个类
# 子类继承父类的所有方法
class 猫(动物):
def 喵喵叫(self):
print '喵喵叫'
可见基本子类形式就是class 子类 (父类):
想class Net (nn.Module):
def init(self):
super(Net, self).init()
Python的类可以继承多个类,Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先
深度优先就是沿着一条线往上走,走到最头上
广度优先就是一层一层找,每层找完
经典类:
class function:
新式类:
class function(object):
查找过程中,一旦找到,则寻找过程立即中断,便不会再继续找了