1.类与实例

类与实例互相关联,类是实例的对象,而实例是真正的实物,他存放了类中所定义的对象的具体信息

Python class定义多个函数 如何调用_实例化


创建一个类

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.多态
多态表明了动态(后来又称为运行时)绑定的存在,允许重载以及运行时类型确定和验证