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()

    类和实例

  • 相关阅读:
    6. Flask请求和响应
    5. Flask模板
    FW:Software Testing
    What is the difference between modified duration, effective duration and duration?
    How to push master to QA branch in GIT
    FTPS Firewall
    Query performance optimization of Vertica
    (Forward)5 Public Speaking Tips That'll Prepare You for Any Interview
    (转)The remote certificate is invalid according to the validation procedure
    Change
  • 原文地址:https://www.cnblogs.com/wangruihua-521/p/8569208.html
Copyright © 2011-2022 走看看