Python的OO思想

想当年大二的时候,在学校学习Java,

最牛逼的OO思想,用了3页纸就讲完了,还是清华大学出版社的呢。

后来全凭自己啃视频,啃代码才搞懂什么叫做OO。

现在学习Python,就用自己的方式,好好学习一次:

OO的基本,是封装,继承,多态。

首先是继承:

定义一个类:

Python代码  

  1. class Bird(object):
  2. have_feather = True
  3. way_of_reproduction  = ‘egg‘

调用这个类:

Python代码  

  1. summer = Bird()
  2. print summer.way_of_reproduction

与Java不同是,Python是不需要new来实例化类的。

同样,Python的类下面是可以定方法的:

Python代码  

  1. class Bird(object):
  2. have_feather = True
  3. way_of_reproduction = ‘egg‘
  4. def say(self, word=‘hi hi‘):
  5. print ‘i say :‘ + word

注意一点,所有类的函数,必须至少带有一个参数,这个参数必须是self。

类以外的函数没有这一个限制。

Python代码  

  1. chk = Chicken()
  2. print chk.have_feather
  3. print chk.sat(‘hello‘)

__init__()方法

__init__()是一个特殊方法(special method)。Python里会有一些特殊方法,Python会以特别的方式处理它们。特殊方法的名字的特点是前后都有两个下划线。

__init__()方法的特殊在于,如果你在类中定义了这个方法,一旦你根据这个类建立对象,Python就会自动调用这个方法(这个过程也叫初始化)。

如:

Python代码  

  1. class happyBird(Bird):
  2. def __init__(self,more_words):
  3. print ‘We are happy birds.‘,more_words
  4. hb = happyBird(‘Happy,Happy!‘)

父类方法的重载:

Python代码  

  1. class Hello(object):
  2. name = ‘hello‘
  3. def __init__(self):
  4. self.name=‘my name is hello‘
  5. #类中的参数必须带有self参数
  6. def sayhi(self):
  7. print ‘hi you‘
  8. class World(Hello):
  9. def __init__(self):
  10. #这里访问的是父类初始化的变量名
  11. print ‘before:‘,Hello.name
  12. super(World,self).__init__()
  13. #由于调用了父类的初始化构造函数,继承了父类的变量的改变
  14. print ‘after:‘,self.name
  15. #近似于方法重载
  16. def sayhi(self,word=‘baby‘):
  17. #调用父类sayhi方法
  18. super(World,self).sayhi()
  19. print ‘hi ‘+word
  20. def sayWorld(self):
  21. print ‘hi,hello world‘
  22. if __name__ == ‘__main__‘:
  23. c = World()
  24. c.sayhi()
  25. c.sayWorld()

另外,python是允许多继承的,但是这个是个非常危险的操作,建议不要随便使用。

关于Python的多态,就像JavaScript一样,直接访问对象的属性,不需要使用接口,没有类型转换。

对于类型的判断,有抓们的type()函数,和isinstance()函数判断是否某个函数的子类。

Python代码  

  1. isinstance(object, classinfo)
  2. 判断实例是否是这个类或者object是变量
  3. classinfo 是类型(tuple,dict,int,float)
  4. 判断变量是否是这个类型
  5. class objA:
  6. pass
  7. A = objA()
  8. B = ‘a‘,‘v‘
  9. C = ‘a string‘
  10. print isinstance(A, objA)
  11. print isinstance(B, tuple)
  12. print isinstance(C, basestring)
  13. 输出结果:
  14. True
  15. True
  16. True
时间: 2024-11-05 09:26:33

Python的OO思想的相关文章

c++学习笔记---01---C++语言与OO思想介绍

C++语言与OO思想介绍 C++的特点与OO思想 C语言有一个优点,即它的速度可以很快.写出来的程序可以很精练.简单.小巧,不用为了解决某个问题环绕太平洋一大圈. 但如果将C和C++相比较,C++就经常会为了解决某个问题绕一个大圈,所以代码量相对较大,并且里边有一些不是必须的代码. 但C++有个绝对的优势,就是针对不同的对象去做实例化,这就是所谓的OO思想. 什么是OO思想 在面对对象的思想中,任何事物都可以被看做一个对象.一个再复杂的模型结构都是由千千万万个对象组成的.这是根本思想. 例如:地

Python之OO 面向对象

Python之面向对象 在C++和Python中,都有面向对象的概念,但是两者有哪些重要的区别呢?用最简单的语言便是,C++把每一个用户(这里当然值的是使用代码的程序员)当做是潜在的可能的犯罪分子,可以提供给你的部分已经规定好了,不可逾越.Python则是个比较柔和的管理方式,它认为所有的用户都具有高度的自觉性,用户可以很自自觉的使用代码.更加生动的比喻见这里 类与对象 在Python中,类由关键字class定义,例如下面的代码: 1 2 3 4 5 6 7 class Student(obje

python 面向对象设计思想发展史

这篇主要说的是程序设计思想发展历史,分为概述和详细发展历史 一,概述 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的 指令和数 据.简单来说,就是直接编写 0 和 1 的序列来代表程序语言.例如:使用 0000 代表 加载(LOAD),0001 代表 存储(STORE)等. 机器语言由机器直接执行,速度快,但一个很明显的缺点就是:写起来实在是太困难了,一旦你 发现自己 写错了,改起来更蛋疼!这样直接导致程序编写效率十分低下,编写程序花

Python算法——递归思想

编程语言在构建程序时的基本操作有:内置数据类型操作.选择.循环.函数调用等,递归实际属于函数调用的一种特殊情况(函数调用自身),其数学基础是数学归纳法.递归在计算机程序设计中非常重要,是许多高级算法实现的基础 编写递归程序的几个要点: 1.终止条件:最简单情况(避免无限循环) 2.递归公式:相邻两次调用间的关系(递归算法核心) 3.忽略调用具体细节:假设所有调用都会达到终止条件(从思想上接受递归算法的关键) 4.效率:递归算法有时效率较低,可考虑其他更高效的实现方式(见问题5) 下面我们通过几个

len(x) 击败 x.len(),从内置函数看 Python 的设计思想

内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得.Python 被公认是一种新手友好型的语言,这种说法能够成立,内置函数在其中起到了极关键的作用. 举个例子,求字符串 x 的长度,Python 的写法是 len(x) ,而且这种写法对列表.元组和字典等对象也同样适用,只需要传入对应的参数即可.len() 函数是共用的. 这是一种极简哲学的体现:Simple is better than complex. 但是,有些语言并不

python开发面向对象思想--类关联

为了关联各个属性.使用了uuid 工号属性.每个对象都有唯一的属性.另外为了保证对象唯一.我给每个对象的属性都做了hash生成了唯一的属性.hash过程中发现不能hash对象.hash只能hash不可变对象.其次取出对象使用了类静态方法,这样可以一次取出所有的对象,然后用户选择的时候再把uuid存储到对应的关联属性中.如果要查询uuid对应的对象是谁可以通过uuid去打开对应的文件.然后既可以获取到对应的对象了.遮样所有的对象都可以关联起来了. #!/usr/bin/env python#-*-

Python用积分思想计算圆周率

[文本出自天外归云的博客园] 早上起来突然想求圆周率,1单位时圆的面积. 代码如下: from math import pow, sqrt def calc_circle_s_with(r, dy, x_slices): x_from_start_to_cc = sqrt(1 - pow(dy, 2)) dx = x_from_start_to_cc / x_slices x_to_edge = 1 - x_from_start_to_cc quarter_circle_s = 0 while

python之协程与IO操作

协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕. 所以子程序调用是通过栈实现的,一个线程就是执行一个子程序. 子程序调用总是一个入口,一次返回,调用顺序是明确的.而协程的调用和子程序不同. 协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,

Python的平凡之路(6)

一.面向对象编程介绍 1 编程范式: 编程范式(Programming Paradigm)是某种编程语言典型的编程风格或者说是编程方式.随着编程方法学和软件工程研究的深入,特别是OO思想的普及,范式(Paradigm)以及编程范式等术语渐渐出现在人们面前.面向对象编程(OOP)常常被誉为是一种革命性的思想,正因为它不同于其他的各种编程范式.编程范式也许是学习任何一门编程语言时要理解的最重要的术语.编程范式是编程语言的一种分类方式,它并不针对某种编程语言.就编程语言而言,一种编程语言也可以适用多种