面向对象编程

一.函数式编程和面向对象的对比

1.请开发一个消息提醒功能(邮件/短信/微信)

函数:
def email(em,text):
    """
    发送邮件
    :return:
    """
    print(em,text)
def msg(tel,text):
    """
    发送短信
    :return:
    """
    print(tel,text)

def wechat(num,text):
    """
    发送微信
    :return:
    """
    print(num,text)
if 1 ==1:   #   假设用户购买课程,然后给alex发送提醒
    msg('188888888', '张进购买了一个学位课')
    email('alex@sb.com', '张进购买了一个学位课')
    wechat('xxxx', '张进购买了一个学位课')
面向对象:
class Message:
    def email(self,em,text):
        """
        发送邮件
        :return:
        """
        print(em,text)
    def msg(self,tel,text):
        """
        发送短信
        :return:
        """
        print(tel,text)

    def wechat(self,num,text):
        """
        发送微信
        :return:
        """
        print(num,text)
if 1 ==1:
    obj = Message()
    obj.msg('188888888', '张进购买了一个学位课')
    obj.email('alex@sb.com', '张进购买了一个学位课')
    obj.wechat('xxxx', '张进购买了一个学位课')

对比:

  函数: 定义简单/调用简单

  面向对象: 定义复杂/调用复杂,优点:归类,把某些类似的函数放在一起

总结: 

  1.函数式编程可能会比面向对象好

  2.python中支持两种编程方式

  3.面向对象方式格式:

    定义:

      class 类名:                               ----定义了一个类

        def 函数名(self):               ----在类中编写了一个"方法"

          pass

    调用:

      x1= 类名()                               ----创建了一个对象/实例化一个对象

      x1.函数名()                             ----通过对象调用其中一个方法

  4.示例

class Account:
    def login(self):
        user = input("请输入用户名:")
        pwd = input("请输入密码:")
        if user == "alex" and pwd == "sb":
            print("登录成功")
        else:
            print("登录失败")
obj = Account()
obj.login()

2.打印

===========================函数版本==============
"""
            完成以下功能:
                老狗/20岁/男/上山去砍柴
                老狗/20岁/男/开车去东北
                老狗/20岁/男/喜欢大宝剑
            """
def kc(name,gender,age):
    data = "%s性别%s,今年%s岁,喜欢上山去砍柴" %(name,gender,age)
    print(data)
def db(name,gender,age):
    data = "%s性别%s,今年%s岁,喜欢开车去东北" %(name,gender,age)
    print(data)
def bj(name,gender,age):
    data = "%s性别%s,今年%s岁,喜欢大宝剑" %(name,gender,age)
    print(data)
kc("老狗","",20)
db("老狗","",20)
bj("老狗","",20)
面向对象:
class LaoGou:
    def __init__(self,name,gender,age):# 特殊的方法,如果 类名() ,则该方法会被自动执行 (构造方法)
        self.n1 = name
        self.n2 = gender
        self.n3 = age
    def kc(self):
        data = "%s性别%s,今年%s岁,喜欢上山去砍柴" %(self.n1,self.n2,self.n3)
        print(data)
    def db(self):
        data = "%s性别%s,今年%s岁,喜欢开车去东北" %(self.n1,self.n2,self.n3)
        print(data)
    def bj(self):
        data = "%s性别%s,今年%s岁,喜欢大宝剑" %(self.n1,self.n2,self.n3)
        print(data)
obj = LaoGou("老狗","",20)
obj.kc()
obj.db()
obj.bj()

总结:

  1.构造方法

    

示例一:
class Foo:

def __init__(self,name): 构造方法,目的进行数据初始化.
self.name = name
self.age = 18

obj = Foo('侯明魏')

通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可.

示例二:
class Bar:
pass
obj = Bar()
  
2.应用
  1.将数据封装到对象中,以供自己在方法中调用
二.面向对象三大特性:继承 封装 多态
1封装
  把方法封装到类中
  把数据封装到类中
2.继承(python中有多继承和单继承)
  将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法
3.
多态(鸭子模型)





 

posted on 2018-08-27 17:58  阳景♡  阅读(31)  评论(0)    收藏  举报

导航