在格式上,定义一个类和定义一个函数道理是相似的,由一个关键字class 后面加上一个类名字,有两种,经典类和新式类,为了便于好记,比如类名是Myclass(object)就是新式类,Myclass就是经典类。
其实单纯的类就是个名称空间,是对象的定义,就像是汽车的外壳,真正起作用的是’实例‘,实例才是真正能驱动汽车跑起来的玩意。
一般语法结构是先定义一个类,然后可以什么也不做,直接第二行pass就行;也可以添加一个注释,例如文档字符串。然后可以创建类的实例,通常这个过程就是类的实例化。
在这里要注意,例如:
class Myclass(object):
‘随便写的玩玩,嘻嘻’
xijie=Myclass() #这就是创建类的实例
括号内是不需要添加内容的,加了就会报错!
为了让类的功能更完善点,在这里可以向里添加一些色彩,专业术语叫方法。基本形式是:
class Myclass(object):
def fangfa(self):
print ‘I like xijie‘
方法其实可以理解成类似于函数。
这里有一个特殊的方法,就是__init__(),类似于一个构造器,通常括号里传入的第一个参数是self
大概形式是这样的:
class Myclass(object): #定义类名
def __init__(self): #定义构造器或是添加方法都可以
self.name=nm #设置name
self这个参数在所有的方法中都存在,它代表实例对象本身,当实例调用方法时,self没必要特意作为参数传进来,例如:
>>>hello=Myclass() #创建实例
>>>hello.__init__() #调用方法
在这里也可以这样理解:把方法中的self用实例名替换掉,例如xxx被实例化后,self.name与xxx.name一样的了,例如:
首先在vim里是这样,
class Myclass(object):
def __init__(self,nm):
self.name=nm
print ‘so easy‘
然后进入python的交互模式,加入我的这个文件名是good.py,就先导入这个文件,是这样:
>>>import good
>>>xxx=good.Myclass(‘xijie‘)
还可以在交互模式下访问一些实例的属性,信息能直接反馈
如果从一个基类派生出一个子类,那么这个子类会继承这个基类的所有属性,不过这个子类还可以自己专门的属性(在于我们怎么去添加)。
大概形式是这样:
class A(object):
pass
class B(A):
pass
那么类B就是类A 的子类(可以理解成是他的孩子)
类属性可以通过类或是类实例来访问,例如:
class M(object):
count=1 #静态变量
c=M()
M.count #通过类来访问下
c.count # 通过实例来访问
但如果想要更改,只能通过类,改完之后,实例也跟随这改变。但实例是不能对值更改的。例如:
M.count=M.count + 1
如果非要用实例改的话,就会又重新创建一个实例属性。如果闲它多余,可以del + 实例名。
对于类字典可以通过实例来进行修改,再用类去访问验证的确能改。例如:
class M(object):
abc={‘xijie‘:123}
c=M()
c.abc[‘like‘]=456
这时候不管是c.abc还是M.abc ,打印出来的结果都是一样的。
绑定:方法只有被绑定到一个实例,才能调用。
本文出自 “天才的实力” 博客,请务必保留此出处http://8299474.blog.51cto.com/8289474/1391038