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

    面向对象编程

    一、什么是‘对象’

      ”面向对象“的核心是“对象”二字,而对象的精髓在于“整合“,即把‘数据’和‘功能’整合在一起!所以可以说‘对象’就是一个容器,

       一个把‘数据’和‘功能’放在一起的盒子!!

      优点:使得软件具有更高的扩展性,减少代码冗余!

    二、类与对象

      如果多个对象有相似的数据与功能,那么该多个对象就属于同一种类。有了类的好处是:我们可以把同一类对象相同的数据与功能存放到类里,而

      无需每个对象都重复存一份,这样每个对象里只需存自己独有的数据即可,极大地节省了空间。所以,如果说对象是用来存放数据与功能的容器,

      那么类则是用来存放多个对象相同的数据与功能的容器。但是需要强调的是:在程序中,必须要事先定义类,然后再调用类产生对象(调用类拿到

      的返回值就是对象)。产生对象的类与对象之间存在关联,这种关联指的是:对象可以访问到类中共有的数据与功能,所以类中的内容仍然是属于

      对象的,类只不过是一种节省空间、减少代码冗余的机制,面向对象编程最终的核心仍然是去使用对象。

    三、面向对象编程

        以选课系统为例:

    class Student: # 类的命名应该使用“驼峰体”
        # 1、变量的定义
        stu_school='oldboy'  # 数据
    
        # 2、功能的定义  # 功能
        def tell_stu_info(obj):
            print('学生信息:名字:%s 年龄:%s 性别:%s' %(
                obj['stu_name'],
                obj['stu_age'],
                obj['stu_gender']
            ))
    
        def set_info(obj,x,y,z):
            obj['stu_name']=x
            obj['stu_age']=y
            obj['stu_gender']=z
    
     
          # print('哈哈哈')  #  类定义阶段就会执行
    
    
    stu1=Student() # 每实例化一次Student类就得到一个学生对象
    stu2=Student()
    stu3=Student()

      想在实例化的过程中就为三位学生定制各自独有的数据:姓名,性别,年龄,需要我们在类内部新增一个__init__方法,如下

    class Student:
        # 1、变量的定义
        stu_school='oldboy'
    
        #该方法会在对象产生之后自动执行,专门为对象进行初始化操作,可以有任意代码,但一定不能返回非None的值
        def __init__(obj,x,y,z):
            obj.stu_name=x 
            obj.stu_age=y  
            obj.stu_gender=z 
    
    # 实例化
    stu1_obj=Student('egon',18,'male') # Student.__init__(空对象,'egon',18,'male')
    stu2_obj=Student('lili',19,'female')
    stu3_obj=Student('jack',20,'male')
    
    # 调用类的过程又称之为实例化,发生了三件事
    # 1、先产生一个空对象
    # 2、python会自动调用类中的__init__方法然将空对象已经调用类时括号内传入的参数一同传给__init__方法
    # 3、返回初始完的对象

      总结__init__方法:

        1、会在调用类时自动触发执行,用来为对象初始化自己独有的数据

        2、__init__内应该存放是为对象初始化属性的功能,但是是可以存放任意其他代码,想要在类调用时就立刻执行的代码都可以放到该方法内

        3、__init__方法必须返回None

    四、属性访问

      

    class Student:
        # 1、变量的定义
        stu_school='oldboy'
        count=0
    
        # 空对象,'egon',18,'male'
        def __init__(self,x,y,z):
            Student.count += 1
    
            self.stu_name=x # 空对象.stu_name='egon'
            self.stu_age=y  # 空对象.stu_age=18
            self.stu_gender=z # 空对象.stu_gender='male'
            # return None
    
        # 2、功能的定义
        def tell_stu_info(self):
            print('学生信息:名字:%s 年龄:%s 性别:%s' %(
                self.stu_name,
                self.stu_age,
                self.stu_gender
            ))
    
        def set_info(self,x,y,z):
            self.stu_name=x
            self.stu_age=y
            self.stu_gender=z
    
        def choose(self,x):
            print('正在选课')
            self.course=x
    
    # 类中存放的是对象共有的数据与功能
    
    Student.school # 访问数据属性,等同于Student.__dict__['school']
    Student.choose # 访问函数属性,等同于Student.__dict__['choose']
    
    # 但其实类中的东西是给对象用的
    # 1、类的数据属性是共享给所有对象用的,大家访问的地址都一样
    print(id(Student.stu_school))
    
    print(id(stu1_obj.stu_school))
    print(id(stu2_obj.stu_school))
    print(id(stu3_obj.stu_school))
    
    
    # 2、类中定义的函数主要是给对象使用的,而且是绑定给对象的,虽然所有对象指向的都是相同的功能,但是绑定到不同的对象就是不同的绑定方法,内存地址各不相同
    
    # 类调用自己的函数属性必须严格按照函数的用法来
    print(Student.tell_stu_info)
    print(Student.set_info)
    
    Student.tell_stu_info(stu1_obj)
    Student.tell_stu_info(stu2_obj)
    Student.tell_stu_info(stu3_obj)

      

  • 相关阅读:
    正则匹配中 ^ $ 和  的区别
    jQuery 选择同时包含两个class的元素的实现方法
    JSON—去除JSON数据中的所有HTML标…
    HTML5 自定义属性 data-*属性名一定要小写吗?
    Java线程池(ExecutorService)使用
    ExecutorService中submit和execute的区别
    启用Microsoft loopback Adapte
    【Spring】如何配置多个applicationContext.xml文件
    C#编程之AES加密(一)
    C#编程之利用C#创建dll并调用(三)
  • 原文地址:https://www.cnblogs.com/qjk95/p/12653695.html
Copyright © 2011-2022 走看看