Python学习第七天

类的静态方法 类方法及属性:

接着上节课的面向对象编程的继承和多态性:

经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了更多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。

 1 class D:
 2
 3     def bar(self):
 4         print ‘D.bar‘
 5
 6
 7 class C(D):
 8
 9     def bar(self):
10         print ‘C.bar‘
11
12
13 class B(D):
14
15     def bar(self):
16         print ‘B.bar‘
17
18
19 class A(B, C):
20
21     def bar(self):
22         print ‘A.bar‘
23
24 a = A()
25 # 执行bar方法时
26 # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
27 # 所以,查找顺序:A --> B --> D --> C
28 # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
29 a.bar()

经典类多继承

 1 class D(object):
 2
 3     def bar(self):
 4         print ‘D.bar‘
 5
 6
 7 class C(D):
 8
 9     def bar(self):
10         print ‘C.bar‘
11
12
13 class B(D):
14
15     def bar(self):
16         print ‘B.bar‘
17
18
19 class A(B, C):
20
21     def bar(self):
22         print ‘A.bar‘
23
24 a = A()
25 # 执行bar方法时
26 # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
27 # 所以,查找顺序:A --> B --> C --> D
28 # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
29 a.bar()

新式类多继承

注:在3.0的环境下 经典类和新式类在继承的时候都是广度优先!!!

多态:

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

注意:在其他语言(例如:Java,c#)定义函数的参数时必须定义参数的类型,在这里并没有!!!

 1 class F1:
 2     pass
 3
 4
 5 class S1(F1):
 6
 7     def show(self):
 8         print ‘S1.show‘
 9
10
11 class S2(F1):
12
13     def show(self):
14         print ‘S2.show‘
15
16 def Func(obj):
17     print obj.show()
18
19 s1_obj = S1()
20 Func(s1_obj)
21
22 s2_obj = S2()
23 Func(s2_obj) 

类的成员:

类的成员可以分为三大类:字段(变量)、方法和属性

注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段。而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份。

时间: 2024-10-14 05:28:32

Python学习第七天的相关文章

python学习笔记七:条件&循环语句

1.print/import更多信息 print打印多个表达式,使用逗号隔开 >>> print 'Age:',42 Age: 42   #注意个结果之间有一个空格符 import:从模块导入函数 import 模块 from 模块 import 函数 from 模块 import * 如果两个模块都有open函数的时候, 1)使用下面方法使用: module1.open()... module2.open()... 2)语句末尾增加as子句 >>> import ma

Python学习第七天课后总结

<html> ? python学习第七天课后总结: 今日内容: 一,,字符编码:其实就是人类的语言与机器的语言进行转化的一种媒介. ? 1,人类语言与机器语言对照关系的结构被称为:编码表 ? 常用编码表大致有以下几个: ? 1> ascii (ASCII) 现为今出现最早的编码表,采用一个字节来存储字母却无法编码汉字 ? 2> GBK 这个是专门为中文来制作的编码,国人专用 ? 3> Shift_JIS 日文使用的文件编码方式 ? 4> Euc-kr 韩文使用的编码方式

python学习第七天 -- dict 和set

今天主要学习关于python 的dict(全称dictionary)和set.dict的用法跟javascript 中map表类似,key + value结构语言.而set,准确来说,只是key的集合. Dict 直接贴代码 >>> d = {'zhangsan': 95, 'lixi': 75, 'wuliu': 85} >>> d['zhangsan'] 95 dict插入 >>>d['wangba'] = 90 //直接插入wangba该学员的成

Python学习笔记七-错误和异常

程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Python检测到一个错误时就出现了异常. 2.异常 当编译器检测到错误并且意识到错误条件.解释器会引发一个异常(程序员也可以自己引发一个异常,后面会说到). 以下是7种Python中常见的错误. 1.NameError,尝试访问一个未申明的例子. 2.ZeroDivisionError,零除错误. 3.

Python学习--第七周

本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典类vs新式类 把下面代码用python2 和python3都执行一下 1 #_*_coding:utf-8_*_ 2 3 4 class A: 5 def __init__(self): 6 self.n = 'A' 7 8 class B(A): 9 # def __init__(self): 1

python学习笔记(七) - 面向对象高级编程

一. 为类动态添加属性和方法: 1. 动态给一个实例添加属性和方法: 给一个实例绑定的方法,对另一个实例是不起作用的. class Student(object): pass s = Student() s.name = 'Michael' # 动态给实例绑定一个属性 print s.name def set_age(self, age): # 定义一个函数作为实例方法 self.age = age from types import MethodType s.set_age = MethodT

据廖雪峰python3教程----python学习第七天

函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了. python的函数除了正常的定义必选参数外,还可以使用默认参数,可变参数合关键字参数, 位置参数 定义一个计算x 的平方的函数 >>> def power(x):               #参数 x 就是一个位置参数      return x**2 >>> power(5) 25 >>> power(15) 225 为了方便我们再定义一个可以计算 x 的任意次的

Python学习笔记七:函数

1. 定义一个函数 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数.参数值和参数名称是按函数声明中定义的的顺序匹配起来的. 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明. 函数内容以冒号起始,并且缩进. Return[expression]结束函数,选择性地返回一个值给调用方.不带表达式的return相当于返回 None. 1 def functionname( parameters ): 2 "函数_文档字符串" 3 function_suite

Python学习记录七---继承、多态和封装

1.创建类 创建文件 test7.py #! /usr/bin/env python class Person: def setName(self, name): self.name = name def getName(self): return self.name def greet(self): print "hello, world! I am %s."% self.name foo = Person() foo.setName('yilia') foo.getName() f

Python学习心得(七) 深入理解threading多线程模块

Python提供了多个模块来支持多线程编程,包括thread.threading和queue模块等.thread模块提供了基本的线程和锁定支持:而threading模块提供了更高级别.功能更全面的线程管理.queue模块,用户可以创建一个队列数据结构,用于在多线程之间进行共享. 核心提示:避免使用thread模块 推荐使用更高级别的threading模块,原因如下: 1.threading模块更加先进,有更好的线程支持,并且thread模块中的一些属性会和threading模块有冲突: 2.低级