首页 > 代码库 > 面向对象编程

面向对象编程

  “对象并不神秘,神秘的是你的眼睛。”

                           -------Elizabeth Bowen

  “选取一个对象,对他进行修改,然后再进行一些其他的修改。”

                              -------Jasper Johns

概述

在面向对象之前,先看一下面向过程编程和函数式编程

面向过程编程

面向过程编程最容易被初学者接受,它往往使用一段长代码来实现指定功能,开发过程中最常见的就是复制粘贴。

技术分享
 1 # !/usr/bin/env python3
 2 # hexm@2016/10/21
 3 
 4 import getpass
 5 
 6 ‘‘‘
 7  输入用户名,如果用户名不在myInfo字典里,提示用户重新输入。
 8  然后输入密码,连续输错三次密码,退出,并加入黑名单./pass.txt
 9  当用户再次登录,提示账号被锁定。
10 ‘‘‘
11 myInfo = {"hexm": "xiaoming235", "alex": "alex3714"}
12 print("现有用户如下,输入用户名请输入以下用户:")
13 for name, pas in myInfo.items():
14     print(\t,name,pas)
15 count = 0
16 # 被限制用户的列表
17 limitUser = []
18 while True:
19     if count < 3:
20         # 捕获异常,第一次验证登录,pass.txt不存在
21         try:
22             limitUser = [x.strip(\n) for x in open(./pass.txt, r)]
23         except (FileNotFoundError):
24             pass
25         # 只第一次输入用户名
26         if count == 0:
27             username = input("Please input your username:")
28 
29         # 如果用户名不存在,提示用户一直输用户名
30         while True:
31             if username not in myInfo.keys():
32                 print("no this user, reinput")
33                 username = input("Please reinput your username:")
34             else:
35                 break
36         # 如果是黑名单用户,break
37         if username in limitUser:
38             print("you account is locaked!!! Please contact xiaoming.unix@gmail.com")
39             break
40         if count == 0:
41             passwd = getpass.getpass("Please input your password:")
42         else:
43             passwd = getpass.getpass("Please reinput your password:")
44 
45         # 验证
46         if username in myInfo.keys() and passwd == myInfo[username]:
47             print("验证通过,欢迎进入CMDB,经历一系列特殊服务,现在退出!")
48             break
49         else:
50             # 第三次输入,加入黑名单
51             if count == 2:
52                 with open(./pass.txt, a) as f:
53                     f.write(username)
54                     f.write(\n)
55                     print("password is wrong,locked your account.")
56     else:
57         break
58     count += 1
查看示例代码

函数式编程

面向过程编程从上往下垒代码,但重用性太差,函数式编程可以增加代码重用性以及可读性。

技术分享
 1 #!/usr/bin/env python3
 2 #hexm@2016/10/21
 3 
 4 
 5 info = {
 6     "上海":{
 7         "浦东新区": {
 8             "张江": "51.com, 惠生公司,百度分部",
 9             "唐镇": "2345公司,abc公司"
10         },
11         "普陀区": "文华苑",
12         "闵行区": "刘德华"
13     },
14     "北京": {
15         "昌平": {
16             "沙河": "老男孩公司"
17         }
18     }
19 }
20 
21 def Page(info):
22     ‘‘‘
23         递归实现的三级菜单
24     ‘‘‘
25     m = 0 #m为选择的数字, 菜单有多少项选择,m会自增多少项
26     dict1 = {}
27     for x in sorted(info):
28         m = m + 1
29         print(m,x)
30         dict1[m] = x  # x为每级菜单值, 并将数字对应地区存入临时字典中, 如:{1: ‘上海‘, 2: ‘北京‘}
31     select = input("Please select a number:")
32     if select == q or select == quit:
33         print("正在退出...")
34         exit(0)
35     select = int(select)
36     length = [ x for x in range(1, len(info) + 1) ] #菜单所有项的和, 如length = [1, 2]
37     if select in length:  #选择的序号在length系列内
38         new = info[dict1[select]] # 下一级菜单值,如 info[dict1[1]]值为 {‘普陀区‘: ‘文华苑‘, ‘浦东新区‘: {‘唐镇‘: ‘2345公司,abc公司‘, ‘张江‘: ‘51.com, 惠生公司,百度分部‘}}
39         if type(new) == dict:  #如果类型为字典,递归
40             Page(new)
41         else: #否则输出,到最后一层
42             print(new)
43     else:
44         print("输入错误,退出..")
45 Page(info)
三级菜单示例代码

面向对象编程

<style>p { margin-bottom: 0.21cm } a:link { }</style>

在面向对象之前,先了解一下什么是对象,我们都知道,python中一切皆对象,所有的数据(包括整数,浮点数,布尔值,字符串,函数)都是以对象形式存在的,无论是简单的数据海山复杂的代码模块。

所有的python对象都拥有三个特性:身份,类型和值。

  • 身份:对象的唯一标识符,通过id()得到

  • 类型:对象有不同的类型,类型决定了可以对他进行的操作,比如一个类型为int的对象支持与另一个int对象相加,同时变量的类型还决定它里面的数据是可变的(变量)还是不可变的(常量)。可通过type()查看对象的类型。

  • 值:对象表示的数据项。

面向对象编程是一种编程方式,此编程方式需要使用类和对象来实现,所以面向对象编程就是对类和对象的使用。

  举个简单例子:

  类是一个生产青铜器的模具,而对象就是通过这个模具制作出来的。例如,python中的内置类string可以创建像‘cat’和‘duck’这样的字符串对象。

面向对象编程