1.类与实例
类与实例互相关联,类是实例的对象,而实例是真正的实物,他存放了类中所定义的对象的具体信息
创建一个类
class MyNewObject(object):
class_suite
object是所有类之母,如果你的类没有继承任何其他的父类,object将作为默认的父类。它位于所有类继承结构的最上层。如果你没有继承直接或者间接子类化一个对象,那么我们就定义了一个经典类(不建议使用经典类)
class MyNewObject:
class_suite
实例化
先创建一个类
class Myfirst(object):
pass
#实例化这个类
obj=Myfirst()
#关于类作为名称空间容器
>>> obj.x=4
>>> obj.y=5
>>> obj.y+obj.x
9
>>>
"在这里实例名字obj将obj.x与obj.y关联起来,这就是我们所说的使用类作为名字空间容器。obj.x与obj.y是实例属性,并不是类Myfirst的属性,是obj实例对象的独有属性。"
2.方法
类的功能有一个更加通俗的名字叫做方法,在python中,方法定义在类定义中,但只能被实例所调用。
class MyClass(object): #定义类
def printFoo(self): #定义方法
print "You win"
"对于seld参数,他在所有的方法声明中都存在,这个参数代表实例对象本身,当你用实例调用方法的时候,由解释器悄悄的传递给方法,你不需要自己传递self进来,因为他是自动传人的。在其他的语言中self被称为“this” 一般的方法会需要这个实例,而静态方法或者类方法就不需要,其中类方法需要的是类而不是实例"
#实例化类,创建一个对象
obj=MyClass()
obj.printFoo()
*******Output*******
You win
3.创建一个类
class MyNewObject(object):
def __init__(self,name,phone):
self.name=name
self.phone=phone
print "Created instance for:",self.name
def updatePhone(self,newphone):
self.phone=newphone
print "update phone %s for %s"%(self.phone,self.name)
#实例化
obj=MyNewObject('cmustard',12345676)
***********output************
Created instance for: cmustard
#方法调用更新
obj.updatePhone(2345235235)
***********output************
update phone 2345235235 for cmustard
#访问实例属性
print obj.name
print obj.phone
***********output************
cmustard
2345235235
在这个类中定义了两个方法__init__
和updatePhone.__init__()
类似于类构造器,他在创建一个新的对象时被调用,在实例化的过程中,调用__init__()
方法,当一个类被实例化时,就可以定义额外的行为,比如设定初始值等等。
4.创建和使用子类
class NewClass(MyNewObject):
def __init__(self,name,phone,id,email):
MyNewObject.__init__(self,name,phone)
self.id=id
self.email=email
def updateEmail(self,newEmail):
self.email=newEmail
print "Update e-mail address for ",self.name
"我们创建了一个MyNewObject的一个子类,这个新的类,不仅继承了父类的updatePhone方法,还增加了updateEmail方法"
"注意,这里我们要显示传递self实例对象给基类构造器,因为我们不是在在实例中而是在一个子类实例中调用哪个方法。只是因为我们不是通过实例来调用它,这种未绑定的方法调用需要传递一个适当的实例(self)给他"
>>> cmustard=NewClass('cmustard','400-820-8820',3345,'cmustard@cmustard.com')
Created instance for: cmustard
>>> print cmustard
<__main__.NewClass object at 0x00000000033D1E48>
>>> cmustard.name='mustard'
>>> cmustard.name
'mustard'
>>> cmustard.updatePhone('400-110-3345')
update phone 400-110-3345 for mustard
>>> cmustard.email
'cmustard@cmustard.com'
>>> cmustard.updateEmail('mustard@163.com')
Update e-mail address for mustard
>>> cmustard.email
'mustard@163.com'
>>>
>>> cmustard.id
3345
>>>
4.常用术语
1.抽象/实现
抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于描绘程序结构从而实现这种模型。
2.封装/接口
3.合成
合成扩充了对类的描述,是得对个不同的类合成为一个大的类,来解决现实问题,。合成描述了一个异常复杂的系统,比如一个类有其他类组成,更小的组件也有可能是其他类,数据属性及行为,所有这些合在一起,彼此是“有一个”的关系。
4.派生/继承/继承结构
5.泛华/特化
泛华表示所有子类与其父类及祖先类有一样的特点,所有子类可以认为同祖先类是“是一个”关系,因为一个派生对象是一个祖先类的例子。
6.多态
多态表明了动态(后来又称为运行时)绑定的存在,允许重载以及运行时类型确定和验证