• 初识面向对象


     今日内容

    1 面向对象介绍

    2 类的定义

    3 属性的写法

    4 初始化对象的属性

    5 初始化方法的其他用处

    6 如何为类定制行为

    7 什么是绑定方法或非绑定方法(简介)

    一 面向对象的介绍

    在说面向对象编程之前简单的说一下面向过程的编程

    关注的核心是过程,过程是就是一步一步的执行步骤,既先干啥在干啥

    优点:逻辑清晰 , 复杂问题简单化,流程化

    缺点: 扩展性差,可维护性差

    使用场景:

    对扩展性要求较低的程序例如:系统内核,git,计算器

     

    记住:不是所有程序都要面向对象,得分析具体需求

     

    1.什么是面向对象:
      面向对象是一种编程思想:面向  朝着,向着

    2.对象是什么:

      面向对象的关注点是对象,把你的思维方式从具体操作变成了指挥者

    注意: 对象不是凭空出现的,需要我们自己先去设计对象,然后在使用对象

    3.面向的对象的优点和缺点:

    · 优点: 不需要再关注具体的实现细节,可以更好的关注业务逻辑,扩展性提高了,维护性高,复用性高

       缺点:  对比面向对象的编程而言,程序需要先设计,结构更复杂,编程复杂度提高了,你也无法预知执行结果

    什么是对象:

      世间万物都是对象

      对象:具备某种特征与行为的结合体,并且是具体存在的称之为对象

      类: 某些具备相同特征和相同行为的结合体,是一种抽象的概念

      类型 == 类,比如说 动物,够

      特征 == 属性

      行为 == 技能

    那么对象和类的关系(它们的关系分为在生活中和在代码中):

        在生活中:先有对象在有类

        在代码中: 必须现有类,才能产生对象(因为你要提前告诉计算机这个对象是什么样的,有什么样的技能)

    二 类的定义

    1. 定义类的语法

    class 类的名称:
         类中的内容 描述属性和技能 
        描述属性用变量
        描述行为用函数 
    
    类名称 书写规范  首先是见名知意 名称是大驼峰命名法  
    驼峰就是单词首字母大写 , 大驼峰是第一个字母大写,小驼峰是第一个字母小写

    2. 定义对象的语法

    class Person:
        pass
    
    创建对象
    p = Person

    三 属性的写法:

    属性如何来书写:

    1.属性可以写在类中:类中的属性,是所有对象的公共的

    2.也可以写在对象中:对象中的属性,是每个对象独有的(不一样的)

    注意:
      如果类中和对象中存在同样的属性,先访问对象中的,没有在访问类中的

    案例:描述一个老师类,需要包含一个公共属性和一个独特的属性

    1 class Teacher:
    2     school = "oldboy"
    3     
    4 t1 = Teacher()
    5 t1.name = "jack"
    6 t1.age = 28
    View Code

    3.属性的增删改查方法

     1 增加属性 
     2 对象变量名称.属性名称 = 属性值
     3 
     4 删除属性
     5 del 对象的变量名称.属性名称 
     6 
     7 修改 
     8 对象.属性 = 新的值 
     9 
    10 查看属性  访问的是对象的所有属性 
    11 print(对象.__dict__)
    12 
    13 访问对象的类信息
    14 print(对象.__class__)
    View Code

    四  初始化对象的属性

    就是—init—方法

    叫做初始化方法,本质上就是一个函数

    特点1: 当实例化 对象时,会自动执行init方法

    特点2:会自动将对象作为第一个参数传入,参数名称位self ,self可以是别的名字,但不建议改

    特点3:该函数不允许有返回值

    功能:用户给对象赋初始值

     

     

    案例:创建一个类具备几个属性,通过初始化方法来给他设置属性

     1 class Teacher:
     2     school = 'oldboy'
     3 
     4     def __init__(self,name,age):
     5         print(self)
     6         self.name = name
     7         self.age = age
     8 
     9 
    10 t1 = Teacher('zy',19)
    11 print(t1.name,t1.age)
    12 print(t1)
    View Code

    五 初始化函数的其他用处

    1.初始化函数不仅仅用于赋值

    可以处理赋值以外的初始化操作

    案例:

     1 class PC:
     2     def __init__(self,kind,price,sys):
     3         self.kind = kind
     4         self.price = price
     5         self.sys  = sys
     6         # 处理赋值以外的初始化操作,比如启动BIOS啥的
     7         print('启动BIOS')
     8         print('启动系统分区')
     9         print('加载系统界面')
    10         print('启动成功')
    11 
    12 p = PC('apple',15000,'ios')
    13 
    14 print(p.kind,p.price,p.sys)
    View Code

    六 如何为类定制行为

    案例:

     1 class Student:
     2     school = 'oldgirl'
     3 
     4     def __init__(self,name,age,gender):
     5         self.name = name
     6         self.age = age
     7         self.gender = gender
     8 
     9     def say_hi(self):
    10         print('hello i am a student my name is %s my age is %s my sex is %s'
    11               % (self.name,self.age,self.gender))
    12 
    13 
    14 stu1 = Student('ZY ',19,'male')
    15 print(stu1.say_hi())
    16 
    17 Student.say_hi(stu1)
    18 
    19 stu1.say_hi()
    View Code

    七 什么是绑定方法或非绑定方法

    绑定方法分为绑定类 和 绑定对象

    1.绑定对象的方法:

      在类中定义的函数默认都是绑定到对象的方法,但是参数第一个必须是self,表示当前对象本身,使用对象来调用,调用时会自动传入对象

    2.绑定到类的方法:用classmethod装饰器

      参数第一个必须是cls表示当前类本身,使用类名来调用,调用时会自动传入类

    3.非绑定方法:用staticmethod装饰器

      不与类或对象绑定,类和对象都可以调用,但是没有自动传值这么一说,就是一个普通函数  

    4.绑定到类的方法与绑定到对象的方法总结:

      异同点:

        相同点:绑定对象调用时都有自动传值的效果,绑定到谁就由谁来使用

        不同点:绑定到类的方法自动传入当前类,绑定到对象的方法自动传入当前对象

    注意:绑定方法中 self ,cls 可以用其他的,但是约定俗成用这个

    案例:绑定到类的方法

     1 class OldBoyStudent:
     2     school = 'oldboy'
     3     def __init__(self,name):
     4         self.name = name
     5 
     6     @classmethod # 类绑定方法
     7     def show_school(cls):
     8         print(cls.school)
     9 
    10 OldBoyStudent.show_school()
    View Code

    案例:绑定到对象的方法(默认就是绑定给对象)

     1 class OldBoyStudent:
     2     school = 'oldboy'
     3     def __init__(self,name):
     4         self.name = name
     5 
     6 
     7     def show_school(self):
     8         print(self.school)
     9 
    10 p = OldBoyStudent('zy')
    11 
    12 p.show_school()
    View Code

    总结:最后来做一个小练习吧

    案例:为学生类中添加一个save方法,一个get方法,save是将对象存储到文件中,get 是从文件中获取对象

     1 import pickle
     2 
     3 class Student:
     4     def __init__(self,name):
     5         self.name = name
     6 
     7     def say_hi(self):
     8         print('my name is %s'%(self.name))
     9 
    10     def save(self):
    11         with open(self.name,'wb') as f:
    12             pickle.dump(self,f)
    13 
    14     @staticmethod
    15     def get(name):
    16         with open(name,'rb') as f:
    17             obj = pickle.load(f)
    18             return obj
    19 
    20 
    21 stu = Student('zy')
    22 stu.save()
    23 
    24 obj = Student.get('zy')
    25 print(obj.name)
    View Code

          

  • 相关阅读:
    vector<vector<int>> 判断三个数为一组是否重复
    数位dp——hdu2089不要62
    nyoj1099 四点坐标判断正方形
    构造回文——最长公共子序列问题 java
    nyoj08 一种排序
    记录一个protobuf枚举类型引发问题的分析和思考
    记录一下996.icu
    Android N requires the IDE to be running with Java 1.8 or later
    使用fresco后引发的关于造轮子的思考
    使用了一段时间的instant run 记录一下遇到的问题
  • 原文地址:https://www.cnblogs.com/zahngyu/p/11240734.html
Copyright © 2020-2023  润新知