初识面向对象

Posted zahngyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识面向对象相关的知识,希望对你有一定的参考价值。

 今日内容

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      

 

以上是关于初识面向对象的主要内容,如果未能解决你的问题,请参考以下文章

第一小节 初识面向对象

初识面向对象

OC-初识面向对象

16 初识面向对象

初识面向对象

python之面向对象初识