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传递进来
    

  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第50章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第49章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第48章 读书笔记(待更新)
    Spring Boot 中使用 Quartz 实现任务调度
    实战 FastDFS Java 客户端上传文件
    分布式文件系统之 FastDFS
    Java 持久层框架之 MyBatis
    C语言实现贪吃蛇
    [转载]分享三篇非常好的学习心得
    selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349527.html
Copyright © 2011-2022 走看看