python04 面向对象编程02
- 记住两个原则:
- 减少重复代码
- 代码会经常变更
2 会对变量或字符串的合法性检测(在实例初始化的时候能够统一初始化各个实例的变量,换做函数来说,要弄出同样的变量那么在初始化的时候必须一个一个的去写代码,容易写错。)
3 类能够隐藏属性或者变量。
1 封装:就是把客观事物封装成抽象的类,而且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏
2 继承:它可以使用现有类的所有功能,并且在无须重新编写原来的类的情况下对这些功能进行扩展,继承是从一般到特殊的过程,父类是定义一般的方法,而子类是有特殊的方法,所以这就是从一般到继承的过程。
3 多态:实现的目的在于对接口的重用
#!/usr/bin/env python #定义一个父类 class animal(object): #定义一个类变量 hobbie='eat meat' def __init__(self,name): self.name=name def talk(self): print('talking.......') #定义一个子类 class dog(animal): def talk(self): print('i am dog ,wangwangwang') return 'i am dog ,wangwangwang' #定义一个子类,继承父类 class cat(animal): def talk(self): #print('miao miao miao') return 'miao miao miao' #定义一个函数,用来调用实例的方法,这样对外的话,我提供了一个接口来分别给使用者调用talk方法 def animal_talk(obj): print(obj.talk()) d=dog('ljf') #定义实例的变量,变量名是hobbie,这个实例的hobbie不同于类的hobbie,所以在print的时候只会打印实例的hobbie, d.hobbie='fish' print(d.hobbie) c=cat('yq') #这个实例c由于没有自己的类变量hobbie,所以在打印的时候就显示类的变量hobbie print(c.hobbie) animal_talk(d) animal_talk(c)
#!/usr/bin/env python ' def __init__(self,name): self.name=name #加了两个下划线后的变量名,此时变为了私有属性,也就是私有变量 self.__num='private' def talk(self): print("%s are talking"%self.name) #类方法,不能够访问实例变量,把walk方法变成了类方法,可以直接类名.方法名调用,但是要注意的是walk里 # 面的代码块的变量或者其他的对象都应该是类可以访问的。 @classmethod def walk(self): #由于添加了类方法的装饰器,所以这里的%s只能用类属性(animal.name,也叫类变量)去赋值给%s, print("\t\t%s are talking"%self.name) #静态方法,不再传self参数进去。所以不能够访问类变量以及实例变量,如果添加了self,那么就要在调用的时候把实例名传进去 @staticmethod def habit(): print("%s's habbit : walking"%animal.name) @property #把方法变成属性,那么调用的时候可以不用加括号(),一般是为了隐藏该方法 def runing(self): print("%s is running"%self.name) def r_private(self): return self.__num @property def total_players(self): return self.__num #这样可以修改添加了@property里面的值 @total_players.setter def total_players(self,num): self.num=num print("total players:",self.num) animal.walk() d=animal('ljf') d.walk() d.habit() d.runing #咱们访问私有变量一般都是写个方法,通过方法返回私有变量 d.r_private() #下面的直接加两个下划线来访问私有属性是错误的方法 #print(d.__num) #通过下面的赋值的方法,等于新建了一个__num的变量。这个和私有变量__num是两码事 d.__num='ahahh' print(d.__num) #强制访问私有变量,实例名._类名__私有变量名 print(d._animal__num)
#!/usr/bin/env python class foo(object): """ this class was test """ name='ljf' age=' def __init__(self): self.tt='durex' def f1(self): print('ssssss') def __call__(self, *args, **kwargs): print("use call method") a=foo() #__doc__ 打印类的注释信息 print(a.__doc__) #__dict__ 打印类里面的类变量,下面a.__dict__是打印实例的变量 print(a.__dict__) #类或对象中的所有成员(所有变量) print(foo.__dict__) #__call__ 这个的话是在类实例化后的对象加个括号出发,如x=class(),x()这样在实例化之后就加个()能够触发 a() #__init__() 是构造方法,在实例化的时候就会触发执行 #__module__ 和__class__ #__module__表示当前操作的对象在哪个模块里面 #__class__表示当前操作的对象的类是什么
'''__del__ 析构方法,当对象在内存中被释放时,自动触发执行。注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。'''
#!/usr/bin/env python ''' 类的继承之深度优先还是广度优先 ''' class A: def f1(self): print("f1 from A") def f2(self): print("f2 from A") class B: def f1(self): print("f1 from B") def f2(self): print("f2 from B") class C: def f1(self): print("f1 from C") def f2(self): print("f2 from C") class D(B,C): pass d=D()
'''此时D继承了类B,C,那么执行f1方法的时候,首先从同样等级的父类的子类里面,从左往右执行。也就是首先从B里面找f1,f2,如果B里面没有f1,f2,那么就找C里面的,C里面也没有的话就往C和B的父类往上找,直到找到为止,这就是广度优先在python2.7 2.6版本内是这样的:1 经典类是深度优先2 新式类是广度优先在python3.0 版本是:不关新式类还是经典类,都是广度优先。'''d.f1()d.f2()
抽象类:
python04 面向对象编程02的更多相关文章
- JavaScript的面向对象编程(OOP)(一)——类
在学习JavaScript面向对象的编程之前,需要知道,并了解面向对象的一些基本的常识.初学者中大多数都以为面向对象中,面向对象的编程是很重要和占据很大一部分精力.笔者在之前也是认为OOP是面向对象的 ...
- JAVA的面向对象编程--------课堂笔记
面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么 ...
- sdut 上机练习8面向对象编程(对象的数组)
上机练习8面向对象编程(对象的数组) Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 利用类对象数组完毕N个学生数据(学号是字符串类型.成绩是整型)的输入 ...
- 8.1Python面向对象编程(一)
目录 目录 前言 (一)基本概念 ==1.面向过程与面向对象== ==2.类与对象== (二)类属性的相关操作 ==1.定义一个经典类== ==2.对象属性的操作== ==3.类属性的操作== ==4 ...
- C之面向对象编程20170707
语言只是工具,设计思维才是根本.C虽然是面向过程的语言,但也是可以实现面向对象编程的,本文就是介绍如何使用C语言实现面向对象编程. 我们知道面向对象主要有三大特性:封装,继承,和多态,下面就从这个三个 ...
- JAVA的面向对象编程
JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...
- PythonI/O进阶学习笔记_3.2面向对象编程_python的封装
前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第三篇 封装. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...
- Python基础之面向对象编程
面向对象编程 —— Object Oriented Programming 简写 OOP 01. 面向对象基本概念 我们之前学习的编程方式就是 面向过程 的 面向过程 和 面向对象,是两种不同的 编程 ...
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
随机推荐
- 开发WP版本的大菠萝英雄榜
前言 想当年Team有无数人在玩大菠萝,我被忽悠进来做肉盾,选了蛮子,从1.0开始,经历了103.105.108.2.0.2.1.这个游戏对我最大的帮助是学习了不同的技术,比如XAML.比如xcode ...
- C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)
1. 首先将窗口属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码里添加: 2. 添加KeyPress / KeyDown事件: 1.KeyPress 和KeyDown .Ke ...
- 发短信的简单实现——C#版
为了验证操作人的身份,界面中通常会有获取验证码的功能.及点击获取验证码就会往你输入的手机号里面发送一条短信进行验证. 最近公司给我的任务中也包含这个功能,那么接下来就让我讲解下. ---------- ...
- mysql忘记密码怎么办?
mysql有时候忘记密码了怎么办?我给出案例和说明!一下就解决了! Windows下的实际操作如下 1.关闭正在运行的MySQL. 2.打开DOS窗口,转到mysql\bin目录. 3.输入mysql ...
- RHCSA试题分享
RHCSA 部分 密码破解 在linux16最后加入 rd.break 进入交换模式以后输入下列指令: mount -o remount,rw /sysroot chroot /sysroot pa ...
- Java自己实现双向链表LinkList
/** * <p> * Node 双向链表实体类 * <p> * * @author <a href="mailto:yangkj@corp.21cn.com& ...
- Android判断当前系统时间是否在指定时间的范围内(免消息打扰)
/** * 判断当前系统时间是否在指定时间的范围内 * * @param beginHour * 开始小时,例如22 * @param beginMin * 开始小时的分钟数,例如30 * @para ...
- Elasticsearch 权威指南
Elasticsearch 权威指南 http://fuxiaopang.gitbooks.io/learnelasticsearch/content/index.html
- Shell命令_文件系统常用命令df、du
一.df(文件系统查看命令) [root@localhost ~]# df [选项] [挂载点] 选项: -a 显示所有的文件系统信息,包括特殊文件系统,如 /proc. /sysfs -h 使用习惯 ...
- Linux_Shell_Bash快捷键
来自为知笔记(Wiz)