zoukankan      html  css  js  c++  java
  • Python 学习笔记(十四)Python类(二)

    创建简单的类

    新式类和经典类(旧式类)

    Python 2.x中默认都是经典类,只有显式继承了object才是新式类

    Python 3.x中默认都是新式类,经典类被移除,不必显式的继承object

    新式类都从object继承,经典类不需要

    新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索

    新式类相同父类只执行一次构造函数,经典类重复执行多次

    截止到python2.1,只存在旧式类。旧式类中,类名和type是无关的:如果x是一个旧式类,那么x.__class__定义了x的类名,但是type(x)总是返回<type 'instance'>。这反映了所有的旧式类的实例是通过一个单一的叫做instance的内建类型来实现的,这是它和类不同的地方。

    新式类是在python2.2为了统一类和实例引入的。一个新式类只能由用户自定义。如果x是一个新式类的实例,那么type(x)和x.__class__是一样的结果(尽管这不能得到保证,因为新式类的实例的  __class__方法是允许被用户覆盖的)。

     1 >>> class AA: #经典类(旧式类)
     2     pass
     3 
     4 >>> aa =AA() 
     5 >>> type(aa)
     6 <type 'instance'>
     7 >>> type(AA)
     8 <type 'classobj'>
     9 >>> aa.__class__
    10 <class __main__.AA at 0x000000000396E348>
    11 >>> class BB(object): #新式类
    12     pass
    13 
    14 >>> bb = BB()
    15 >>> type(bb)
    16 <class '__main__.BB'>
    17 >>> bb.__class__
    18 <class '__main__.BB'>
    19 >>> print aa
    20 <__main__.AA instance at 0x000000000390ECC8>
    21 >>> print bb
    22 <__main__.BB object at 0x0000000002B00B00>
    23 >>> 

    编写方法

    示例1:

     1 #! /usr/bin/env python
     2 # coding =utf-8
     3 
     4 #通常类名首字母大写
     5 
     6 class Person(object):
     7     h =1.8  #属性
     8     def getName(self): #定义一个方法,第一个参数必须是self,而且必须写上,self是类的实例,而非类
     9         print "My name is lily."
    10 
    11     def color(self,col):
    12         print "The sky is {0}".format(col)
    13 
    14 
    15 
    16 p = Person() #把类实例化,p就是实例对象
    17 p.getName()  #调用实例里面的方法或者属性
    18 p.color("blue")
    19 print p.h
    20 
    21 
    22 p.a="hello" #给对象赋了一个属性
    23 print p.a
    24 
    25 p.h =2.8
    26 print p.h

     示例2:

     1 #!/usr/bin/env python
     2 #coding=utf-8
     3 
     4 """
     5 地址的类PersonAddress
     6 属性 人员的姓名| 人员的EMAIL
     7 方法 访问每个属性|修改email地址
     8 """
     9 
    10 class PersonAddress(object):
    11 
    12     name ="zhangsan"
    13     email="zhangsan@gmail.com"
    14 
    15     def aboutPerson(self): #self必须写上
    16         print "NAME:",PersonAddress.name  #访问属性
    17         print "EMAIL:",PersonAddress.email
    18 
    19     def changeEmail(self,email):
    20         PersonAddress.email =email
    21 
    22 
    23 
    24 p = PersonAddress()
    25 p.aboutPerson()
    26 p.changeEmail("cc@gamail.com")
    27 p.aboutPerson()

    类和实例

  • 相关阅读:
    课后作业-阅读任务-阅读提问-1
    Android:XML简介 & 解析方式对比(DOM、SAX、PULL)
    Android Handler
    Android BroadcastReceiver解析
    Android:(本地、可通信的、前台、远程)Service使用全面介绍
    android 服务解析
    android 解决子线程进行UI操作
    android 基础题
    java中的synchronized(同步代码块和同步方法的区别)
    Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
  • 原文地址:https://www.cnblogs.com/wangruihua-521/p/8569208.html
Copyright © 2011-2022 走看看