zoukankan      html  css  js  c++  java
  • 面向对象【三大特性】

    • 面向过程:根据业务逻辑从上到下写垒代码
    • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
    • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

    面向对象三大特性:

      封装:

      1、将相关功能封装到一个类中:
    class Message:
        def email(self): 
            pass
    
        def msg(self): 
            pass
    
        def wechat(self): 
            pass
      2、将数据封装到一个对象中:
    class Person:
        def __init__(self, name, age, gender):
            self.name = name
            self.age = age
            self.gender = gender
    
    obj = Person('孙福来', 18, '')

      继承:

      单继承

    class Animal:
    
        def eat(self):
            print "%s 吃 " %self.name
    
    class Cat(Animal):
    
        def __init__(self, name):
            self.name = name
            self.breed = ''
    
        def cry(self):
            print '喵喵叫'
    
    class Dog(Animal):
        
        def __init__(self, name):
            self.name = name
            self.breed = ''
            
        def cry(self):
            print '汪汪叫'
            
    c1 = Cat('小白家的小黑猫')
    c1.eat()
    
    d1 = Dog('胖子家的小瘦狗')
    d1.eat()

      多继承:

    Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先

    • 当类是经典类时,多继承情况下,会按照深度优先方式查找
    • 当类是新式类时,多继承情况下,会按照广度优先方式查找

    经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,

    从写法上区分的话,如果当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。

    class D:
    
        def bar(self):
            print 'D.bar'
    
    
    class C(D):
    
        def bar(self):
            print 'C.bar'
    
    
    class B(D):
    
        def bar(self):
            print 'B.bar'
    
    
    class A(B, C):
    
        def bar(self):
            print 'A.bar'
    
    a = A()
    # 执行bar方法时
    # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
    # 所以,查找顺序:A --> B --> D --> C
    # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
    a.bar()
    经典类多继承
    class D(object):
    
        def bar(self):
            print 'D.bar'
    
    
    class C(D):
    
        def bar(self):
            print 'C.bar'
    
    
    class B(D):
    
        def bar(self):
            print 'B.bar'
    
    
    class A(B, C):
    
        def bar(self):
            print 'A.bar'
    
    a = A()
    # 执行bar方法时
    # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
    # 所以,查找顺序:A --> B --> C --> D
    # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
    a.bar()
    新式类多继承

       多态:

    class Foo1:
        def f1(self):
            pass
    
    class Foo2:
        def f1(self):
            pass
    
    class Foo3:
        def f1(self):
            pass
    
    def func(arg):
        arg.f1()
    
    obj = Foo1()  # obj= Foo2()   obj = Foo3()
    func(obj)
  • 相关阅读:
    C/C++中的abort、atexit、exit和_Exit
    从QQ聊天看交流的有效性
    HDU 1711 Number Sequence (KMP)
    pintos操作系统thread部分的实现
    搜狗面试的经典题(C++map按值排序,class struct的差别)
    SQL学习之使用order by 依照指定顺序排序或自己定义顺序排序
    选中多个或全中订单逻辑
    HDU 4415 Assassin's Creed(贪心)
    ashx文件中使用session提示“未将对象引用设置到对象的实例”
    .NET运行机制
  • 原文地址:https://www.cnblogs.com/shanae/p/9545935.html
Copyright © 2011-2022 走看看