zoukankan      html  css  js  c++  java
  • python 类和实例

    类的定义:
    
    我们选用的第一个建模现实世界里的问题是创建一份通信录。
    
    要在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:Python27python.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:Python27python.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:Python27python.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:Python27python.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传递进来
    

  • 相关阅读:
    mysql双主配置
    nginx js、css多个请求合并为一个请求(concat模块)
    PHP中利用Redis管道加快执行
    总结最近游戏中活动出现被刷问题。
    问题记录--负载均衡的均衡器配置了高可用导致问题
    php的session获取不到问题之ie浏览器(yaf框架)
    Django URLs error: view must be a callable or a list/tuple in the case of include()
    在Sublime Text运行Python.How to run Python code from Sumblime Text
    JavaWeb项目自动化部署测试学习
    hadoop2.5.1+hbase1.1.2安装与配置
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349527.html
Copyright © 2011-2022 走看看