Python之类一
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/10/18 16:14
# @Author : Ropon
# @File : 22_01.py
#1、面向过程编程
#2、函数式编程
# def func(arg):
# pass
# func(1)
# func(2)
# 为什么要将某些函数写到指定文件中?
# 对函数进行归类
# 函数式编程与面向对象编程区别:
# 函数
# def email(em, text):
# """
# 发送邮件
# """
# print(em, text)
#
# def msg(tel, text):
# """
# 发送短信
# """
# print(tel, text)
#
# def webchat(num, text):
# """
# 发送微信
# """
# print(num, text)
#
# if 1 == 1:
# email('11@qq.com', '测试发送邮件')
# msg('13xxxxxx', '测试发送短信')
# webchat('ropon', '测试发送微信')
# 面向对象
# class Message:
# def email(self, em, text):
# """
# 发送邮件
# """
# print(em, text)
#
# def msg(self, tel, text):
# """
# 发送短信
# """
# print(tel, text)
#
# def webchat(self, num, text):
# """
# 发送微信
# """
# print(num, text)
#
# if 2 == 2:
# obj = Message()
# obj.email('11@qq.com', '测试发送邮件')
# obj.msg('13xxxxxx', '测试发送短信')
# obj.webchat('ropon', '测试发送微信')
# 对比:
# 函数:定义简单、调用简单
# 面对对象:定义复杂、调用复杂 好处:归类,将某些类似的函数写在一起
# 总结:
# 函数式编程可能比面向对象好
# Python中支持两种编程方式
# 面向对象方式格式
# 定义:
# class 类名: 定义一个类
# def 函数名(self): 类中编写一个方法
# pass
# 调用
# x1 = 类名() 创建一个对象或者说实例化一个对象
# x1.函数名() 调用对象中的一个方法
# 构造方法
# class Foo:
# def __init__ (self, name): # 构造方法,目的进行数据初始化
# self.name = name
# self.age = 18
# obj = Foo('测试')
# print(obj.name)
# 通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可
# 将数据封装到对象中,以供其他函数调用
# def func1(arg):
# print(arg.name)
# print(arg.os)
# print(arg.cpus)
#
# class Ebs:
# def __init__(self, name, os ,cpus):
# self.name = name
# self.os = os
# self.cpus = cpus
#
# obj = Ebs('ebs-1', 'centos7.5', '4')
# func1(obj)
# 1 查看用户信息
# 2 查看用户账单
# 3 购买抱枕
# 4 退出
# 请选择您需要做的操作:
# class UserInfo:
#
# def __init__(self):
# self.name = None
#
# def info(self):
# print('当前用户名称是{0}'.format(self.name))
#
# def account(self):
# print('用户{0}的账单是...'.format(self.name))
#
# def shopping(self):
# print('用户{0}购买了一个抱枕...'.format(self.name))
#
# def login(self):
# name = input('请输入用户名:')
# passwd = input('请输入密码:')
# if name == 'ropon' and passwd == '123':
# self.name = name
# while 1:
# lst = ['查看用户信息', '查看用户账单', '购买抱枕', '退出']
# for num, index in enumerate(lst, 1):
# print(num, index)
# num = int(input('请选择您需要做的操作:'))
# if num == 1:
# self.info()
# elif num == 2:
# self.account()
# elif num == 3:
# self.shopping()
# elif num == 4:
# exit()
# else:
# print('非法选项,请重新选择')
# else:
# print('登录失败')
#
# obj = UserInfo()
# obj.login()
# class Demo:
# def __init__(self, name):
# self.name = name
#
# def msg(self,text):
# print(self.name, text)
#
# obj = Demo('ropon')
# obj.msg('再次测试发送信息')
# 面向对象三大特性:封装、继承、多态
# 封装
# 将相关功能封装到一个类中
# 将数据封装到一个对象中
# 继承
# 编写格式
# class 子类名(父类名):
# pass
# 调用子类方法,优先在子类中找,如果找不到就到父类找
# 继承提高代码重用性
# 支持多继承(先找左/再找右)
# class Vhost:
# def func1(self):
# print('func1')
#
# class OpVhost(Vhost):
# def func2(self):
# print('func2')
#
# class LsVhost(OpVhost):
# def func3(self):
# print('func3')
#
# def func1(self):
# print('LsVhost.func1')
#
# class Tvhost(LsVhost, OpVhost, Vhost):
# def func4(self):
# print('func4')
#
# obj = Tvhost()
# obj.func3()
# obj.func2()
# obj.func1()
# obj.func4()
# 多态
# 相同调用方式,不同的执行效果(多态性)
# class Site:
# def list(self):
# print('site.list')
#
# class Ftp:
# def list(self):
# print('ftp.list')
#
# class Db:
# def list(self):
# print('db.list')
#
# def func1(arg):
# arg.list()
#
# obj = Site()
# # obj = Ftp()
# # obj = Db()
# func1(obj)