类的定义:

我们选用的第一个建模现实世界里的问题是创建一份通信录。

要在Python里创建一个类,你需要提供class关键字,这个心的类的名字,

以及一个或多个基类(base class)

例如,如果要创建一个Car(轿车)或是Trunk(卡车)类的话,你可以用Vehicle作为一个基类。

如果你不想从任何现有类继承的话,只需使用Python的根(root)类或类型object作为你的基类

class AddressBookEntry(object):
    version=0.1
    def __init__(self,name,phone):
        self.name=name
        self.phone=phone
s=AddressBookEntry('aa','bb')
print s
print s.name
print s.phone


C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a7.py
<__main__.AddressBookEntry object at 0x02037E30>
aa
bb


class AddressBookEntry(object):
    version=0.1
    def __init__(self,name,phone):
        self.name=name
        self.phone=phone

    def update_phone(self,phone):
        self.phone=phone
s=AddressBookEntry('aa','bb')
print s
print 's.name'+' '+s.name
print 's.phone'+' '+s.phone
print '-------------'
s.update_phone('cc')
print 's.phone'+' '+s.phone

C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a7.py
<__main__.AddressBookEntry object at 0x02146330>
s.name aa
s.phone bb
-------------
s.phone cc

version这样类的静态成员的(Static class member)的创建时通过在类定义里赋值完成的。

这样的成员就是属于类的变量,可以在所有时间之间共享。


方法(method)的定义和函数一样,就是每个方法都必须带上一个额外的self对象---Python在这一点上非常明确。


变量self 指向的是类的一个特定的实例(在其他语言里用this来代表这个slef的概念)

class AddressBookEntry(object):
    version=0.1
    def __init__(self,name,phone):
        print self
        self.name=name
        self.phone=phone

    def update_phone(self,phone):
        self.phone=phone
s=AddressBookEntry('aa','bb')
print s
print 's.name'+' '+s.name
print 's.phone'+' '+s.phone
print '-------------'
s.update_phone('cc')
print 's.phone'+' '+s.phone

C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a7.py
<__main__.AddressBookEntry object at 0x02276330>
<__main__.AddressBookEntry object at 0x02276330>
s.name aa
s.phone bb
-------------
s.phone cc

变量self指向的是类的一个特定的实例(在其他语言里用this来代表这个self的概念)

一个在执行过程中创建出来让你操作的真实对象。

所有以self开头以及点--属性形式出现的变量都是一个实例属性,即一个属于特定实例的对象。

如果你有使用其他面向对象特性语言的经验的话,奇怪注意Python没有构造函数和析构函数的概念

实例化:


 其他语言一般都使用new语句来创建实例,不过Python里你只要像调用函数一样调用类的名字就可以了。

Python 用的是"初始化程序"而不是构造函数。

所以名字用的也是__init__,在实例化一个对象时,你需要传入__init__所需的参数。

在Python在创建对象时会用你提供的参数自动调用__init__,并最终返回将一个新创建的对象返回给你。

我们说的调用方法,不过其实也完全可以说是函数调用。虽然你在方法声明里被要求提供self参数

class AddressBookEntry(object):
    version=0.1
    def __init__(self,name,phone):
        print self
        self.name=name
        self.phone=phone
john=AddressBookEntry('John Doe','408-555-1212')
print john
print '---------------------'
jane=AddressBookEntry('Jane Doe','650-555-1212')
print john

C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a8.py
<__main__.AddressBookEntry object at 0x022C6350>
<__main__.AddressBookEntry object at 0x022C6350>
---------------------
<__main__.AddressBookEntry object at 0x022C6370>
<__main__.AddressBookEntry object at 0x022C6350>




Python会为每个实例调用__init__,随后返回这个对象。仔细看,这里并没有在调用时给出self,

只有name和phone number,Python会为你传入self的。


现在你就可以直接访问属性了,比如john.name,john.phone,jane.name和jane.phone






class AddressBookEntry(object):
    version=0.1
    def __init__(self,name,phone):
        print self
        self.name=name
        self.phone=phone

    def update_phone(self,phone):
        self.phone=phone

再次强调一下,注意这里的update_phone方法实际上有两个参数,self和newphone.

但是我们只需要提供新的phone number就可以了,Phone会自动将指向john的实例对象作为self传递进来