zoukankan      html  css  js  c++  java
  • 面向对象

    面向对像

    1、面向过程编程

        核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么

        基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式

        优点:复杂的问题流程化、进而简单化

        缺点:可扩展性差

    James = ['student of nick','160','180']
    
    Python中一切皆对象
    对象的概念: 就是特征和技能的结合体
    面向*对象*编程: 定义出一个个鲜明独特的对象,然后通过对象之间的交互编程

    优点: 扩展性非常强
    缺点: 逻辑非常复杂

    语法

    # 类的声明:
    '''
    class 类名:  # class定义类语法的关键字
        pass
    '''
    
    # 对象的产生: 对象的实例化
    '''
    对象1 = 类名()
    对象2 = 类名()
    对象3 = 类名()
    '''
    
    # 类与对象都有自己独立的名称空间,每一个被实例化出来的对象,名称空间也是各自独立
    # 所以类与对象都能额外添加 属性(变量) 和 方法(函数)
    
    # 重点:类一旦被加载(随着所属文件的加载就加载),就会进入类的内部执行类中的所有代码
    

    类与对象 

    类:具有相同特征与行为事物集合体的抽象

    对象:现实中,实际存在的各个事物,也就是抽象出的类的具体表现

     定义类

    class Student:
        pass
    

     产生对象

    stu = Student()
    

     添加特征与行为

    stu.name = 'James'
    stu.get_age = lambda age: age
    

     造类

    # 造类
    
    def f1():  # 函数定义阶段,只检测语法,不执行代码(牢记)
        # 1/0
        school = 'oldboy'
        addr = 'shanghai'
    
    class OldBoyStudent:  # 类的定义阶段,会运行代码(牢记)
        # 1 / 0
        school = 'oldboy'
        addr = 'shanghai'
    
        def choose_course(self):
            # 1 / 0
            print('is choosing course')
    
    oldboystudent_dict = OldBoyStudent.__dict__  # 双下划线开头的方法会在某种情况下自动触发
    print(oldboystudent_dict['school'])
    oldboystudent_dict['choose_course'](1111)
    
    造对象(实例化对象)
    stu1 = OldBoyStudent()
    print(1, stu1.school)
    1,stu1.choose_course()
    
    stu2 = OldBoyStudent()
    print(2,stu2.school)
    stu3 = OldBoyStudent()
    print(3,stu3.school)
    
    •    定制对象独有的特征
     print(
         OldBoyStudent.__dict__)  # {'__module__': '__main__', 'school': 'oldboy', 'addr': 'shanghai', 'choose_course': <function OldBoyStudent.choose_course at 0x00000288C04389D8>, '__dict__': <attribute '__dict__' of 'OldBoyStudent' objects>, '__weakref__': <attribute '__weakref__' of 'OldBoyStudent' objects>, '__doc__': None}
     print('stu1', stu1.__dict__)  # stu1 {}
       stu1.__dict__['id'] = 222222
      stu1.id = 222222
      print(stu1.__dict__)
      print(stu1.id)
      print(OldBoyStudent.__dict__)
    
    
      print('stu2', stu2.__dict__)  # stu2 {}
        stu2.__dict__['id'] = 666666
      stu2.id = 666666
      print(stu2.id)
    

    对象查找属性的顺序

    class People:
        # 类自带(不同在外界额外添加)的属性与方法
        identify = '人类'
        def sleep(self):
            print('睡觉')
        
        
    p1 = People()
    p2 = People()
    
    p1.identify = '新人类'
    print(p1.identify)  # 访问自己的
    p1.__dict__.clear()  # 删除自己的后
    print(p1.identify)  # 访问类的
    
    print(p2.identify)  # p2没有自己的,访问类的
    
    # 重点:属性的访问顺序:优先加载自身的名字,如果没有再考虑类的
    

     数据类型

    int/float/str/list/tuple/dict/set/func/class
    class Foo:
        pass
    
    f1 = Foo()
    print(type(f1))
    
    
    lis = [1,2,3,4]  # lis = list([1,2,3,4])
    print(type(lis))
    lis.append(5)
    
    s = str('str')
    
  • 相关阅读:
    XAMPP 无法启动解决
    40 个轻量级 JavaScript 库 (上)
    WebService 异常处理方案
    datagridview
    生成噪点背景验证码代码
    checkbox的全选,反选
    listView绑定数据
    什么是工厂模式
    C#基础积累(二)面向对象
    后台使用类将对象序列化为JSon字符串
  • 原文地址:https://www.cnblogs.com/legend27/p/11046101.html
Copyright © 2011-2022 走看看