面向对象

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

  对比:

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

    面向对象:定义复杂、调用复杂  好处:归类,将某些类似的函数写在一起

  总结:

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

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

    3.面向对象方式格式:

      定义:

        class 类名:        定义了一个类

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

            pass

      调用:

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

        x2.函数名         通过对象调用其中一个方法

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

    构造方法:   

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

obj = Foo('asd')

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

    应用:

      1.将数据封装到对象中,以供自己在方法中调用

      2.将数据封装到对象中,以供其他函数调用

二、面向对象代码如何编写

  1.规则

class Foo:
    
    def __init__(self,name):
        self.name = name 
        
        
    def detail(self,msg):
        print(self.name,msg)
        
obj = Foo()
obj.detail() 

  2.写法:

    方式一:归类+提取公共值

    方式二:在指定类中编写和当前类相关的所有代码 + 提取公共值

三、面向对象三大特性:封装、继承、多态

  封装:

    将相关功能封装到一个类中:

class Message:
    def email(self):pass
    def msg(self):pass
    def wechat(self):pass

    将相关数据封装到一个对象中:

class Person:
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
                        
obj = Person('asd',18,'')        

  继承:提供代码重用性

class SuperBase:
        def f3(self):
            print('f3')

    class Base(SuperBase):  # 父类,基类
        def f2(self):
            print('f2')

    class Foo(Base):        # 子类,派生类
        
        def f1(self):
            print('f1')
            
    obj = Foo()
    obj.f1()
    obj.f2()
    obj.f3()
    # 原则:现在自己类中找,么有就去父类

    支持多继承(先找左,再找右)

  多态:

    多种形态或多种状态

    鸭子模式,只要可以嘎嘎加就是鸭子

    python原生支持多态,所以没有特殊性

posted @ 2018-08-27 14:57  被嫌弃的胖子  阅读(93)  评论(0编辑  收藏  举报