一、Python经典类与新类

经典类:如果没有直接或间接的子类化一个对象,也就是说如果没有指定一个父类,或者是如果子类化的基本类没有父类,那么就定义了经典类:

class classics:
    'define a classics Class'
    pass

新式类:与经典类相反。object是“所有类之母”,也就是基类,如果你的类没有继承任何父类,object将作为默认的父类:

class newClass(object):
    'define a classics Class'
    pass

二、Python的实例化

创建一个实例的过程叫实例化,在其他编程语言中一般用关键字 new ,但是在Python中没有这个关键字。而是类似函数调用的方式创建实例的:

class newClass(object):
    pass

inst = newClass()
print inst      #<__main__.newClass object at 0x00B71650>

三、类最简单的用法

类最简单的用法仅仅用作名称空间,意味着将数据保存到变量中,使用句点属性标识对它们按名称空间分组。

class newClass(object):
    pass

bar = newClass()    #创建实例
bar.x = 1           #创建实例属性
bar.y = 2
print bar.x+bar.y

注意:bar.x  ,bar.y  是实例对象的属性不是类的属性。

四、方法

方法就是类的功能

方法在类中定义,只能被实例调用。

在类中,方法有一个默认参数self,这个参数代表实例本身,当用实例调用方法时,由解释器悄悄传递给方法。

class newClass(object):
    def method(self):
        return self

bar = newClass()
print bar.method()  #<__main__.newClass object at 0x00B71910>

在其他语言中,self一般称为this,一般方法会用到这个实例(self),但是静态方法和类方法不需要。

五、创建类、方法、实例对象访问

class addPerson(object):
    def __init__(self,nm,ph):   #定义构造器
        self.name = nm          #设置name
        self.phone = ph         #设置phone
        print 'Created instance for',self.name
    def updatePhone(self,newph):
        self.phone = newph
        print 'Updated phone for',self.phone

josn = addPerson(')     #创建实例对象josn
ben = addPerson(')      #创建实例对象ben
print 'Instance property:[%s][%s]' %(ben.name,ben.phone)    #访问实例属性
ben.updatePhone(')
print ben.phone

六、子类

创建子类:靠继承来进行子类化,在不影响父类(基类)的基础上改进自己的功能。

如:继承上面的类

class addInfo(addPerson):
    def __init__(self,nm,ph,id,em):         #定义自己的构造器
        addPerson.__init__(self, nm, ph)    #继承父类构造器(这个很重要)
        self.empid = id
        self.email = em

    def updateEmail(self,newem):
        self.email = newem
        print 'Updated e-mail address for:',self.name

zhangsan = addInfo(','ZhangSan@gmail')    #创建addInfo实例,输出Created instance for ZhangSan
print zhangsan                          #<__main__.addInfo object at 0x00B71BD0>
print 'Instance property:[%s],[%s],[%s],[%s]' %(zhangsan.name,zhangsan.phone,zhangsan.empid,zhangsan.email)
#输出:Instance property:[ZhangSan],[123456789],[01],[ZhangSan@gmail]
zhangsan.updatePhone(')             #Updated phone for 250
zhangsan.updateEmail('Zhang@163.com')   #Updated e-mail address for: ZhangSan
 

注意:

如果需要,每个子类最好定义自己的构造器,不然的话,基类的构造器将会被调用。然而如果子类重写基类的构造器,那么基类的构造器就不会被自动调用,必须显式写出来才行,如上的:addPerson.__init__

Python入门笔记(24):Python面向对象(1)速成的更多相关文章

  1. Python入门笔记(22):Python函数(5):变量作用域与闭包

    一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...

  2. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  3. Python入门笔记(21):Python函数(4):关于函数式编程的内建函数

    一.关于函数式编程的内建函数 apply()逐渐被舍弃,这里不讨论 1.filter() #filter(func,seq) """纯Python描述filter函数&q ...

  4. Python入门笔记(20):Python函数(3):关于lambda

    一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的.如下: """命名的foo函数&q ...

  5. Python入门笔记(14):Python的字符编码

    一.字符编码中ASCII.Unicode和UTF-8的区别 点击阅读:http://www.cnblogs.com/kingstarspe/p/ASCII.html 再推荐一篇相关博文:http:// ...

  6. Python入门笔记(19):Python函数(2):函数/方法装饰器

    一.装饰器(decorators) 装饰器的语法以@开头,接着是装饰器函数的名字.可选参数. 紧跟装饰器声明的是被装饰的函数和被装饰的函数的可选参数,如下: @decorator(dec_opt_ar ...

  7. PYTHON 学习笔记1 PYTHON 入门 搭建环境与基本类型

    简介 Python,当然大家听到这个名词不再是有关于像JAVA 一样的关于后台,我们学习Python 的目的在于对于以后数据分析和机器学习AI 奠定基础,Python 在数据分析这一块,可谓是有较好的 ...

  8. python学习笔记(一):python简介和入门

    最近重新开始学习python,之前也自学过一段时间python,对python还算有点了解,本次重新认识python,也算当写一个小小的教程.一.什么是python?python是一种面向对象.解释型 ...

  9. 大爽Python入门教程 2-4 练习

    大爽Python入门公开课教案 点击查看教程总目录 方位输出 第一章有一个思考题,方位变换: 小明同学站在平原上,面朝北方,向左转51次之后(每次只转90度), 小明面朝哪里?小明转过了多少圈? (3 ...

随机推荐

  1. php 方便快捷导出excel

    /** * 导出excel * @param array $column * eg: $column = [ * 'username' => '姓名', * 'age' => '年龄', ...

  2. Linux 统计某个字符串出现的次数

    要统计一个字符串出现的次数,这里现提供自己常用两种方法: 1. 使用vim统计 用vim打开目标文件,在命令模式下,输入 :%s/objStr//gn 即可 2. 使用grep: grep -o ob ...

  3. Codeforces 346C Number Transformation II 构造

    题目链接:点击打开链接 = = 990+ms卡过 #include<stdio.h> #include<iostream> #include<string.h> # ...

  4. ubuntu 12 JDK 编译

    下载openjdk源码 http://jdk7.java.net/source.html 安装Ubuntu上面的依赖包: .参考原书 环境变量配置: .去www.hzbook.com上面将深入理解ja ...

  5. 降低屏幕亮度,减缓眼疲劳 (linux/windows/firefox/android)

    Linux 在Linux上自动调整屏幕亮度来保护眼睛 - 51CTO.COM -- 介绍了Camera和RedShift这两款工具 How to automatically dim your scre ...

  6. [Core Javascirpt] Basic Metaprogramming: Dynamic Method

    Somehow it looks like reflect in Java. For example: We define an mothod on the Object, it called def ...

  7. viewpager的简单使用,以及ValueAnimator的用法示例

    之前在网上看到一篇viewpager简单使用的例子程序,主要采用了上部标签button+中间指示作用的imageview+下部viewpager的结构,点击上部标签,或者滑动viewpager,均可以 ...

  8. Phantomjs 一些简单实用

    Phantomjs是一个基于webkit的服务器端JavaScirpt API.它全面支持web而不需要浏览器支持,并且原生支持web的各种标准:DOM处理,CSS选择器,JSON,Canvas和SV ...

  9. 彻底删除mysql方法

    首先,先在服务(开始——>控制面板——>管理工具——>服务)里停掉MySQL的服务.打开控制面板-添加删除程序,找到MySQL,卸载.或者用360安全卫士来卸载也行.也可以用mysq ...

  10. POJ 1650 Integer Approximation

    Integer Approximation Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5081   Accepted:  ...