这篇博客记录廖雪峰python教程的习题(三)
2018-02-08 20:28
399 查看
模块
包package 是一个目录,是为了避免不同的人使用相同的模块名(py文件的文件名)每一个包下面都必须得有一个init.py文件。而且目录(package)下面可以有子目录,里面又可以有init.py文件以及其他的py文件,比如一个叫abc.py的文件就是名叫abc的模块。如果一个xyz.py文件在一个my_company目录下面,那么此时xyz.py的模块名就叫做 my_company.xyz,而且该package包下面的.init.py本身就是一个模块,模块名就是包的名字 my_company
比如:
mycompany
├─ web
│ ├─ init.py
│ ├─ utils.py
│ └─ www.py
├─ init.py
├─ abc.py
└─ xyz.py
mycompany.web也是一个模块,请指出该模块对应的.py文件。
就是 web目录下的init.py
总结一下就是 python里的模块就是一个py文件,里面是很多python代码,可能封装了几个函数。
先自己写几个代码,熟悉一下相关的功能:
首先score 和name 都可以在外部访问,也就是你在外边调用xuan.name 和xuan.score 是可以正确运行的
面向对象编程
类和实例
#首先来复习一下面向对象编程的几个小栗子 #由于name,score这里没有设成private 变量,因此外部仍然可以访问:xuan.name xuan.score 并且可以通过赋值进行修改name 和score的值 class Student(object): def __init__(self,name,score): #__init__()里面定义的是属性 self.name=name self.score=score def print_info(self): #类里边的函数就是方法,类的具体实例可以进行调用该方法 print("name:%s;score:%s"%(self.name,self.score)) def level(self): if self.score>=90: print("the level is :A") elif self.score>=80: print("the level is :B") else: print('the level is :C') def main(): xuan=Student("Zhangxuan",100) information=xuan.print_info() my_level=xuan.level() #在命令行输入 xuan.name 和xuan.score 是可以得到具体的name score ,因为不是私有变量,外部可以访问 main()
下面把name 和score都设成私有变量self.__name,self.__score,这样在外部访问self.__name self.__score 是不可以的
代码
class Student(object): def __init__(self,name,score): #__init__()里面定义的是属性 self.__name=name #那name变量设成私有变量 self.__score=score def print_info(self): print("name:%s;score:%s"%(self.__name,self.__score)) def level(self): if self.__score>=90: print("your level is A") elif self.__score>=80: print("your level is B") else: print("your level is C") def main(): xuan=Student("Zhangxuan",88) xuan.print_info() xuan.level() #在命令行输入 xuan.__name xuan.__score 是得不到name 和score的,因为是私有变量 main()
那么对于私有变量我们是否可以访问它的值呢,如何访问或者修改,其实我们可以在类内重新定义相关函数,用来获取或修改私有变量的值,因为私有变量在类内是可以进行修改的
class Student(object): def __init__(self,name,score): self.__name=name self.__score=score def print_info(self): print("name:%s;score:%s"%(self.__name,self.__score)) def level(self): if self.__score>=90: print("your level is A") elif self.__score>=80: print("your level is B") else: print("your levle is C") def get_name(self): return self.__name def get_score(self): return self.__score def set_name(self,name): if isinstance(name,str): self.__name=name return self.__name else: print("what you input is not a string!") def set_score(self,score): if score in range(1,101): self.__score=score return self.__score else: print("what you input is not proper!") def main(): xuan=Student("Zhangxuan",99) #类Student会自动输出相关的信息包括名字和分数 my_name=xuan.get_name() #这一步操作主要是为了证明 name score 被设成私有变量,仍然可以在类内编写函数(方法)在外部获取私有变量的值 my_score=xuan.get_score() print("修改之前我的名字和分数是",end=' ') print((my_name,my_score)) print("**********修改前后**********") new_name=xuan.set_name("Zhangxuanxuan") #主要是为了证明其实仍然是可以修改私有变量的值的 new_score=xuan.set_score(100) print("修改后的名字和分数分别是:",end=' ') print((new_name,new_score)) main()
最后看一下练习题:
“请把下面的Student对象的gender字段对外隐藏起来,用get_gender()和set_gender()代替,并检查参数有效性:class Student(object):
def init(self, name, gender):
self.name = name
self.gender = gender
”
代码如下:
#请把下面的Student对象的gender字段对外隐藏起来,用get_gender()和set_gender()代替,并检查参数有效性: class Student(object): def __init__(self,name,gender): self.name=name #把name设成公有变量,外部可以直接访问 self.__gender=gender #把gender设成私有变量,外部若想访问或修改,单独写一个get_gender和set_gender()方法 def print_info(self): print("name:%s;gender:%s"%(self.name,self.__gender)) def get_gender(self): return self.__gender #这是原来gender的值,只不过写一个方法来获取私有变量的值 def set_gender(self,gender): if gender in ["female",'male']: #为了判断输入是否正确 self.__gender=gender #外部调用时只需要在set_gender()中传入想要修改gender的参数即可 return self.__gender else: print("The information of gender that you input is wrong! ") def main(): xuan=Student("Zhangxuan",'male') xuan.print_info()#类内会输出相关的信息 my_name=xuan.name #由于不是私有变量 可以写 my_gender=xuan.get_gender() #私有变量gender 需要调用类内单独定义的方法获取 print("修改之前我的姓名和性别:",end=' ') print((my_name,my_gender)) print("**************修改前后*************") new_gender=xuan.set_gender('female') print("我的名字和修改后的性别:",end=' ') print((my_name,new_gender)) main()
继承和多态
比如我们编写一个Student类:class Student(object): def level(self): print("you are a good student")
下面我们定义两个实例:
student=Student()
下面我们就可以调用类里边的方法了(只有实例才可以调用类内的方法!)
student.level()
就会返回
"you are a good student"
下面我们可以定义两个子类,注意仍然是类,只不过继承了父类而已,来继承Student类
#子类 继承父类既可以使用父类的全部方法,也可以重新写新的方法
class Xuan(Student): def level(self): print("you are a good student and you got A in this test")
比如
Zhangxuan=Xuan() Zhangxuan.level()
就可以输出:
you are a good student and you got A in this test
class XuanXuan(Student): def level(self): print("you are a good student and you got B in this test")
比如:
Zhangxuanxuan=XuanXuan() Zhangxuanxuan.level()
就可以输出:
you are a good student and you got B in this test
然后我们定义一个新的方法,只不过里面的参数是类
def Person(person): #这里的person是一个实例 只有实例才可以调用下面的方法level() person.level()
接下来我们就可以通过传传入实例:
Person(Student()) #返回you are a good student Person(Xuan()) #返回you are a good student and you got A in this test Person(XuanXuan()) #返回you are a good student and you got B in this test
上面的太乱了,对以上分析的代码我又重新整理了一下,代码如下:
class Student(object): def level(self): print("\nyou are a good student!\n") class Xuan(Student): #定义一个子类Xuan 继承了父类Student def level(self): #子类可以覆盖父类的同名方法或者在子类内可以重新定义新的方法 print("you are not only a good student and you got A in this test!\n") class XuanXuan(Student): #又定义了一个子类。继承了父类Student def level(self): print("you are a good student but you got a C in this test!\n") def level_test(student): #这里函数level_test()传的参数是一个实例,类的实例,因为下面调用了类的方法 student.level() def main(): student=Student() #父类Student的一个实例 student.level() #只有类的实例可以调用该类内定义的方法也就是函数 level_test(Xuan()) #Xuan()是子类Xuan的一个实例 level_test(XuanXuan()) #XuanXuan是子类XuanXuan的一个实例 main()
相关文章推荐
- 这篇博客记录廖雪峰python教程的习题(一)
- 这篇博客记录廖雪峰python教程的习题(六)
- 这篇博客记录廖雪峰python教程的习题(七)
- 这篇博客记录廖雪峰python教程的习题(五)
- 这篇博客记录廖雪峰python教程的习题(二)
- 这篇博客记录廖雪峰python教程的习题(四)
- 这篇文章记录廖雪峰python教程的习题(九)
- 这篇文章记录廖雪峰python教程的习题(九)
- python博客(廖雪峰教程项目)
- 这篇文章记录廖雪峰pyton教程的习题(八)
- Python学习笔记- 廖雪峰教程【python 2】//为继续学习爬虫准备-02 [待完善]
- 廖雪峰的Python教程-高阶函数
- 廖雪峰JS教程学习记录----Map和Set
- 廖雪峰Python教程学习笔记
- 廖雪峰python教程答案
- python爬取廖雪峰javascript教程
- 笨方法学python练习1-输出函数(结合廖雪峰教程知识点)
- 廖雪峰Python 2.X 教程
- Python教程(廖雪峰)——模块
- 廖雪峰老师Python教程读后笔记