Python基础篇(七)
加上两个下划线变量或者方法变为私有。
>>> class Bird:
... __song = "spark"
... def sing(self):
... return self.__song
...
>>> b = Bird()
>>> b.sing()
'spark'
>>> b.__sing()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Bird' object has no attribute '__sing'
实际上,上面的__song定义为私有的,无法直接访问,但是通过下面的方式还是可以得到的:
>>> b._Bird__song
'spark'
成员变量与类变量的区别
>>> class NumberCount:
... number = 0
... def count(self):
... self.number = self.number + 1
...
>>> n = NumberCount()
>>> n.count()
>>> n.number
1
>>> num = NumberCount()
>>> num.count()
>>> num.number
1
>>> class NumberCount:
... number = 0
... def count(self):
... NumberCount.number = NumberCount.number + 1
...
>>> n = NumberCount()
>>> n.count()
>>> n.number
1
>>> num = NumberCount()
>>> num.count()
>>> num.number
2
类之间的继承关系
>>> class Filter:
... def init(self):
... self.block = []
... def filter(self,sequence):
... return [x for x in sequence if x not in self.block]
...
>>> f = Filter()
>>> f.init()
>>> f.filter(["1","2","3"])
['1', '2', '3']
>>> class SubFilter(Filter):
... def init(self):
... self.block = ["FDD"]
...
>>> s = SubFilter()
>>> s.init()
>>> s.filter(["FDD","1","2"])
['1', '2']
判断一个类是否是另一个类的子类
>>> issubclass(SubFilter,Filter)
True
用__class__或者type函数来判断一个实例属于哪个类:
>>> s.__class__
<class '__main__.SubFilter'>
>>> type(s)
<class '__main__.SubFilter'
多继承
>>> class Calculator:
... def cal(self,expression):
... self.value = eval(expression)
...
>>> class Talker:
... def talk(self):
... print("the result of what you input is ",self.value)
...
>>> class Test(Calculator,Talker):
... pass
...
>>> t = Test()
>>> t.cal("3*788 + 999")
>>> t.talk()
the result of what you input is 3363
通过实例来判断类是否有某个方法:
>>> hasattr(t,"talk")
True
Python中异常的处理:
>>> try:
... x = input("enter the first number: ")
... y = input("enter the second number: ")
... print((int)(x)/(int)(y))
... except ZeroDivisionError:
... print("the second number can not be zero")
...
enter the first number: 10
enter the second number: 0
the second number can not be zero
使用raise继续抛出异常
>>> class HideException:
... isHide = False
... def cal(self,expression):
... try:
... return eval(expression)
... except ZeroDivisionError:
... if self.isHide:
... print("the second number can not be zero")
... else:
... raise
...
>>> r = HideException()
>>> r.cal("3/0")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in cal
File "<string>", line 1, in <module>
ZeroDivisionError: division by zero
>>> r.isHide = true
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined
>>> r.isHide = True
>>> r.cal("3/0")
the second number can not be zero
打开屏蔽,则按自己的定义输出。关闭屏蔽,抛出异常。
定义自己的异常:
>>> class MyException(Exception):pass
...
同时捕获多个异常
>>> class DivideTest:
... try:
... x = input("enter the first member: ")
... y = input("enter the second member: ")
... print(int(x)/int(y))
... except (ZeroDivisionError,TypeError,NameError):
... print("input was wrong")
...
enter the first member: 10
enter the second member: 0
input was wrong
捕获错误信息e
>>> class DivideTest:
... try:
... x = input("enter the first member: ")
... y = input("enter the second member: ")
... print(int(x)/int(y))
... except (ZeroDivisionError,TypeError,NameError) as e:
... print(e)
...
enter the first member: 10
enter the second member: 0
division by zero
捕获全部的异常
>>> class DivideTest:
... try:
... x = input("enter the first member: ")
... y = input("enter the second member: ")
... print(int(x)/int(y))
... except Exception as e:
... print(e)
...
enter the first member: 10
enter the second member: 0
division by zero
finally语句,始终会被执行
>>> x= None
>>> try:
... x = 1/0
... finally:
... print("whatever will be excuted!")
...
whatever will be excuted!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: division by zero
和Java不同的是,Python子类不会默认调用父类的构造函数,需要显示的使用super函数取调用父类的构造函数。
>>> class Bird:
... def __init__(self):
... self.hungry = True
... def eat(self):
... if self.hungry:
... print("eating")
... self.hungry = False
... else:
... print("Full")
...
>>> b = Bird()
>>> b.eat()
eating
>>> b.eat()
Full
>>> class SingBird(Bird):
... def __init__(self):
... self.song = "sqawk"
... def sing(self):
... print(self.song)
...
>>> s = SingBird()
>>> s.sing()
sqawk
>>> s.eat()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in eat
AttributeError: 'SingBird' object has no attribute 'hungry'
>>> class SingBird(Bird):
... def __init__(self):
... super(SingBird,self).__init__()
... self.song = "sqawk"
... def sing(self):
... print(self.song)
...
>>> s = SingBird()
>>> s.sing()
sqawk
>>> s.eat()
eating
>>> class SingBird(Bird):
不使用super函数而直接调用父类的构造方法也是可以的
>>> class sBird(Bird):
... def __init__(self):
... Bird.__init__(self)
... self.song = "sqwak"
... def sing(self):
... print(self.song)
...
>>> ss = sBird()
>>> ss.eat()
eating
>>> ss.eat()
Full
Python的语句相对Java是比较灵活的
>>> for key,value in dire.items():
... print(key,value)
可以直接写语句,写方法,写类。不像Java,语句肯定是位于类的方法中的。
使用Python的内建类型list:
>>> class CounterList(list):
... def __init__(self,*args):
... super(CounterList,self).__init__(*args)
...
>>> cl = CounterList(range(10))
>>> cl
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Python基础篇(七)的更多相关文章
- python基础篇(六)
PYTHON基础篇(六) 正则模块re A:正则表达式和re模块案例 B:re模块的内置方法 时间模块time A:时间模块的三种表示方式 B:时间模块的相互转换 随机数模块random A:随机数模 ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- Python基础篇(五)_文件和数据格式化
Python基础篇_文件和数据格式化 文件的使用:文件打开.关闭.读写 文件打开:通过open()函数打开文件,并返回一个操作文件的变量. 使用语法:<变量名> = (<文件路径以及 ...
- python基础篇-day1
python基础篇 python是由C语言写的: pass 占位符: del,python中全局的功能,删除内存中的数据: 变量赋值的方法: user,pass = 'freddy','freddy1 ...
- python基础篇之进阶
python基础篇之进阶 参考博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html python种类 1. cpython 使用c解释器生产 ...
- python基础篇(五)
PYTHON基础篇(五) 算法初识 什么是算法 二分查找算法 ♣一:算法初识 A:什么是算法 根据人们长时间接触以来,发现计算机在计算某些一些简单的数据的时候会表现的比较笨拙,而这些数据的计算会消耗大 ...
- python基础篇(一)
PYTHON基础篇(一) 变量 赋值 输入,输出和导入 A:输入 B:输出 C:导入 运算符 A:算数运算符 B:比较运算符 C:赋值运算符 D:位运算符 E:逻辑运算符 F:成员运算符 G:身份运算 ...
- python基础篇(二)
PYTHON基础篇(二) if:else,缩进 A:if的基础格式和缩进 B:循环判断 C:range()函数和len()函数 D:break,contiue和pass语句 for,while循环 函 ...
- python基础篇(三)
PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...
- python基础篇(四)
PYTHON基础篇(四) 内置函数 A:基础数据相关(38) B:作用域相关(2) C:迭代器,生成器相关(3) D:反射相关(4) E:面向对象相关(9) F:其他(12) 匿名函数 A:匿名函数基 ...
随机推荐
- HDU1754-I Hate It-线段树
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Palindromes
http://acm.hdu.edu.cn/showproblem.php?pid=1318 Palindromes Time Limit: 2000/1000 MS (Java/Others) ...
- [国嵌笔记][023][ARM寻址方式]
寻找方式 1.处理器根据指令中给出的信息来找到指令所需操作数的方式 2.立即数寻址 操作数本身在指令中给出,立即数前加”#”表示立即数寻址,操作数在指令中 3.寄存器寻址 利用寄存器中的数值作为操作数 ...
- webpack运行常见错误归纳
今天在运行项目的时候,又遇到坑了,在公司运行的好好的项目,到我自己电脑上就报错,提示跨域,想了好久都不明白为啥,webpack配置文件里的ip地址我也改成与本地ip对应的,百思不得其解,在寻求别人帮助 ...
- 使用Flink的SavePoint功能
Flink通过SavePoint功能可以做到程序升级后,继续从升级前的那个点开始执行计算,保证数据不中断. Flink中CheckPoint用于保存状态,是自动执行的,SavePoint是指向Chec ...
- maven 阿里云仓库配置
<!-- 设定主仓库,按设定顺序进行查找. --> <repositories> <repository> <id>nexus-aliyun</i ...
- MySql 修改外键 支持级联删除
首先必须要有外键,InnoDB甚么的都不说了,直接上修改句子. 要先删除该外键,然后添加. 具体原因貌似是因为不支持alter外键的操作. ALTER TABLE `t_terminal` DROP ...
- mysql 查看索引使用情况
show status like 'Handler_read%'; Handler_read_key 代表着一个行被索引值读取的次数,值很低表明索引不经常用到,增加索引对性能改善不高. Handle ...
- javascript之this
全局作用域的this this == window //true this.a = 8 window.a 一般函数的this function thisTest(){ return this; } t ...
- [转]怎么查看和修改 MySQL 的最大连接数?
使用 MySQL 数据库的站点,当访问连接数过多时,就会出现 "Too many connections" 的错误.出现这种错误有两种情况,一种是网站访问量实在太大,服务器已经负担 ...