python 类和实例

来源:互联网 发布:淘宝店铺扫店软件 编辑:程序博客网 时间:2024/05/21 22:55
类的定义:我们选用的第一个建模现实世界里的问题是创建一份通信录。要在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=phones=AddressBookEntry('aa','bb')print sprint s.nameprint s.phoneC:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a7.py<__main__.AddressBookEntry object at 0x02037E30>aabbclass AddressBookEntry(object):    version=0.1    def __init__(self,name,phone):        self.name=name        self.phone=phone    def update_phone(self,phone):        self.phone=phones=AddressBookEntry('aa','bb')print sprint 's.name'+' '+s.nameprint 's.phone'+' '+s.phoneprint '-------------'s.update_phone('cc')print 's.phone'+' '+s.phoneC:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a7.py<__main__.AddressBookEntry object at 0x02146330>s.name aas.phone bb-------------s.phone ccversion这样类的静态成员的(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=phones=AddressBookEntry('aa','bb')print sprint 's.name'+' '+s.nameprint 's.phone'+' '+s.phoneprint '-------------'s.update_phone('cc')print 's.phone'+' '+s.phoneC:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a7.py<__main__.AddressBookEntry object at 0x02276330><__main__.AddressBookEntry object at 0x02276330>s.name aas.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=phonejohn=AddressBookEntry('John Doe','408-555-1212')print johnprint '---------------------'jane=AddressBookEntry('Jane Doe','650-555-1212')print johnC:\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.phoneclass 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传递进来

原创粉丝点击