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

    一、面向对象编程

      面向对象是一门编程思想,核心是“对象”二字,对象指的是特征与技能的结合体,基于该编程思想写程序,就好比创造世界,一种“上帝式”的思维方式

    优点:解决了程序的扩展性

    缺点:编写程序的复杂度高,可控性差

    面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。

    二、类与对象

    1、什么是类

    类指的是类型,类别,是具有相同的特征和技能的一类事物就是类,对象指的是特征与技能的结合体,在现实世界中,先有一个个的对象,总结出类。在程序中,必须先有类,再通过调用类,产生对象。对象是实际存在的,类是抽象产生的

    2、如何定义类

    比如: 选课系统:
                - 选课系统学生类:
                    - 学生对象1:
                        特征:
                            - 姓名: 张三
                            - 性别: 男
                            - 年龄: 23
                            - 学校: oldboy
    
                        - 技能:
                            - 技术: python
                            - 学习: learn
                            - 选课: course
    
                    - 学生对象2:
                        特征:
                            - 姓名: 李四
                            - 性别: 男
                            - 年龄: 27
                            - 学校: oldboy
    
                        - 技能:
                            - 技术: python
                            - 学习: learn
                            - 选课: course

    先从现实世界中通过一个个对象总结出类,然后再定义类,后调用类产生对象。

    定义类语法:
            class 关键字: 帮你产生类的。
    
            class 类的名字:
                - 对象之间相同的特征
                    - 学校
                    school = 'oldboy'
    
                - 对象之间相同的技能
                    - python
                        def python():
                            pass
    
                    - learn
                        def learn():
                            pass
    
                    - course
                        def course():
                            pass

    3、类的使用

    '''
    class 类名:
        特征
        技能
    
    定义类名的规范:
        - 驼峰命名法
    
    '''
     1 def foo():  # 函数名指向的是函数的内存地址
     2     pass
     3 
     4 
     5 print(foo)  # <function foo at 0x000001CDFF119048>
     6 
     7 
     8 # 定义老男孩学生类
     9 class OldboyStudent:  # 类名指向的是类的内存地址
    10     # 学生相同的特征
    11     # 在类中的特征 也称之为 “属性” attribute
    12     school = 'oldboy'
    13 
    14     # 学生相同的技能
    15     # 注意: 在类内部定义函数,会默认有一个参数self
    16     def learn(self):  # self此时当做一个形参
    17         print('learning....')
    18 
    19 
    20 print(OldboyStudent)  # <class '__main__.OldboyStudent'>
    21 
    22 # 查看类的名称空间
    23 print(OldboyStudent.__dict__)
    24 print(OldboyStudent.__dict__['school'])
    25 print(OldboyStudent.__dict__['learn'])
    26 OldboyStudent.__dict__['learn'](123)
    27 
    28 
    29 # 类提供一种特殊获取名字的方式  “类名.名字” 的方式
    30 #
    31 print(OldboyStudent.school)
    32 OldboyStudent.learn('tank')
    33 
    34 #
    35 OldboyStudent.school = 'OldGirl'
    36 print(OldboyStudent.school)
    37 
    38 #
    39 del OldboyStudent.school
    40 
    41 #
    42 OldboyStudent.school = 'Oldboy'
    43 print(OldboyStudent.school)
    44 OldboyStudent.old_student = 'HuChenYang'
    45 print(OldboyStudent.old_student)
    '''
    - 函数的名称空间:
        在调用函数时产生,函数调用结束后销毁。
        
    - 类的名称空间:
        在定义阶段时产生,会将类中所有的名字,扔进类的名称空间中。
    '''

    4、对象

    '''
    对象的产生:
        - 调用类产生对象
    
        类名 + () 调用类产生对象
    
        类的名称空间在定义时产生,对象的名称空间在调用类时产生。
    
        调用类产生对象的过程称之为类的实例化,对象称之为类的一个实例。
    '''
     1 class Student:
     2     # 学校
     3     school = 'oldboy'
     4 
     5     # 学习技能   ----> method ---》 方法
     6     def learn(self):
     7         print(self)  #
     8         print('learning...')
     9 
    10 stu1 = Student()
    11 stu2 = Student()
    12 stu3 = Student()
    13 print(Student)  #
    14 print(Student.school, 'Student...')
    15 print(Student.learn, 'Student...')
    16 Student.learn(123)
    17 print('=' * 100)
    18 
    19 print(stu1)  # <__main__.Student object at 0x0000017BFF8A5898>
    20 print(stu1.school, 'stu1...')
    21 print(stu1.learn, 'stu1...')
    22 print(stu1)
    23 # 对象调用方法时: 会将对象当做第一个参数传入方法中。
    24 stu1.learn()  #
    25 
    26 print('=' * 100)
    27 print(stu2)  # <__main__.Student object at 0x0000017BFF8A5898>
    28 print(stu2.school, 'stu2...')
    29 print(stu2.learn, 'stu2...')
    30 stu2.learn()
    31 
    32 print('=' * 100)
    33 print(stu3)  # <__main__.Student object at 0x0000017BFF8A5898>
    34 print(stu3.school, 'stu3...')
    35 print(stu3.learn, 'stu3...')
    36 stu3.learn()
    '''
    由对象来调用类内部的函数,称之为对象的绑定方法。
        对象的绑定方法特殊之处: 会将对象当做第一个参数传给该方法。
    '''
     1 class Student():
     2     # 学校
     3     school = 'oldboy'
     4 
     5     # 给对象添加新的属性
     6     def __init__(self, name, age, sex):
     7         print(self.__dict__)
     8 
     9         self.name = name
    10         self.age = age
    11         self.sex = sex
    12 
    13         # 查看当前类的名称空间
    14         print(self.__dict__)
    15 
    16     # 公共方法
    17     def learn(self):
    18         print(self)
    19         print('learning...')
    20 
    21 
    22 # 查看类的名称空间
    23 print(Student.__dict__)
    24 
    25 # stu1 = Student()  # Student(stu1)  ---> __init__(self)  ----> self == stu1
    26 # stu2 = Student()  # Student(stu2)  ---> __init__(self)  ----> self == stu2
    27 # stu3 = Student()  # Student(stu3)  ---> __init__(self)  ----> self == stu3
    28 #
    29 # stu1.name = '张三'
    30 # stu1.age = 25
    31 # stu1.sex = '男'
    32 # print(stu1.name, stu1.age, stu1.sex)
    33 
    34 stu1 = Student('李四', 27, '')
    35 print(stu1)
    36 print(stu1.name, stu1.age, stu1.sex)

    想要在调用类时,为对象传入对象独有的特征,需要用到绑定方法__init__

    # __init__(self, name, sex, age):  # name---> 张三 ,  sex---> 女,  age----> 27
    # 调用类时: 会将对象当做第一个参数,与括号内所有的参数一并传给__init__()
    # stu1 = Student('李四', 27, '女')

    在python中,一切皆对象,包括我们之前所学的数据类型例如

    num = 10 ----> num = int(10),int就是一个类

    list1 = [1, 2, 3] ----> list1 = list([1, 2, 3]),list也是一个类

    对象名字的查找顺序:

      - 对象.属性,会先找对象自己的

      - 若对象没有,会去找类的

      - 若类没有,就会报错

    调用类产生对象发生的事情:
    1.会产生一个空对象的名称空间
    2.会自动触发__init__,并且会将对象当做第一个参数传入。
    3.会将调用类括号内的参数一并传给__init__()

    对象绑定方法的特殊之处:
    1.会将对象当做第一个参数传入。
    2.若对象的绑定方法中还有其他参数,会一并传入。

  • 相关阅读:
    How to Create a site at the specified URL and new database (CommandLine Operation)
    Using Wppackager to Package and Deploy Web Parts for Microsoft SharePoint Products and Technologies
    SQL Server Monitor v0.5 [Free tool]
    How to build Web Part
    Deploy web part in a virtual server by developing a Web Part Package file(.cab)
    How to recreate "sites" link if you delete it accidentally
    SharePoint Portal Server管理匿名访问设置
    Monitor sql connection from .Net SqlClient Data Provider
    Brief installation instruction of Sharepoint Portal Server
    How to Use SharePoint Alternate URL Access
  • 原文地址:https://www.cnblogs.com/hexianshen/p/11928860.html
Copyright © 2011-2022 走看看