面向对象基础

Posted gaimo

tags:

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

 

一、什么是面向过程?

  核心是过程,过程指的是解决问题的步骤,即按部就班,先干什么再干什么....面向过程的设计好比一条流水线,是一种机械式的思维方式。

  优点:复杂的问题流程化,逻辑清晰,从而简单化,分成固定步骤去实现

  缺点:扩展性差,不便于维护和修改

  使用场景:对扩展性要求较低的程序:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,计算器等

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

二、什么是面向对象?

  面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计思想。

  它是将对象作为程序的基本单元,将数据和处理的程序封装到对象中去

  面向对象的例子:

  1、把大象装进冰箱如何实现

  2、要开一家公司

  优点:扩展性强,灵活性,重用性(复用性)

  缺点:程序的复杂程度提高了:无法准确的预知结果

  使用场景:对扩展性要求较高的程序,通常是直接面向用户的,列如:微信 QQ 大型网游等

三、类与对象

  1、什么是类?

  类和对象是面向对象编程中最核心的两个概念

    类就是类型,类别,种类;是一系列对象中相似特征与技能的结合体,比较抽象的概念,如人类是不具体的

 

  2、对象是什么?

    对象是特征与技能的结合体:

      如:演员张一山,姓名和职业是他的特征,演戏是他的行为,按照这样的定义,生活中到处都是对象

    在程序中:用变量来表示对象的特征,用函数来表示对象的技能

    将这些变量和函数结合在一起,形成一个整体,就是对象,这是面向对象的精髓所在!

  3、对象和类的关系:

    类包含一系列对象,对象属于某个类,在生活中是先有对象再有类的

    而在程序中是先有类才能有对象的,我们必须先告诉计算机这类的对象有什么特征有什么行为;

总结出一个结论:在使用面向对象编程的时候,第一步就是思考需要什么样的对象,对象具备什么样的特征和行为

从而根据这些信息总结出需要的类型

 

四、创建类和对象:

  1、定义类的固定语法:

    定义类通过class关键字:class后面紧接着是类名

class 类的名称:
    # 类的内容 描述属性和技能
    # 描述属性用变量,描述行为用函数


# 类名称 书写规范,首先见名知意 名称是大驼峰体命名法


# 驼峰体是单词首字母大写,大驼峰体是第一个字母大写,小驼峰体是第一个字母小写

  

2、创建对象的语法: 

class Person:
    pass

#创建对象
    p=Person()

 

 3、属性的写法

  属性可以写在类中,类中的属性就是对象公共的

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

 

class Teacher:
    school="oldboy" # 公共属性

t1=Teacher()
t1.name="JAMES"
t1.age=20 
#  定义了三个属性

   

4、属性的增删查改

 

增加属性:
    对象变量名称.属性名称=属性值
    t1.name=18

删除属性:
    del 对象的变量名称.属性名称
修改属性:
    对象.属性=新的值
     t1.name=18
     t1.name=20
查看属性:访问的是对象的所有属性

print(对象.——dict——)
# print(Person.__dict__)

访问对象的类信息
print(对象.__class__)
    

 

五、初始化方法:__init__

  什么是初始化?

  用于为对象的属性设置初始值的函数

class Student:

    def __init__ (self,name):

        print("init run")

        self.name = name  # 等价于内置 学生的属性

  __init__函数要求第一个参数必须是self,该参数表示需要初始化的对象本身,这样就可以将name属性绑定到对象上

def __init__(self,)  self不能修改,且不能为空,必需传参

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

  

class Dog:
    def__init__(self,kind,color,age):
            self.kind=kind
            self.kind=color
            self.age=age

di=Dog("哈士奇",“黑白”,1.5)
d2=Dog("泰迪",“棕色”,2)



注意:该函数不能有任何返回值/.... 只能是None  规定如此..(即不带有return)

  

小结:

  • init函数用于为对象属性设置初始值
  • 在创建对象时会自动调用
  • 自动传入对象本身

六、 属性的查找顺序

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

 优先查找对象自己的名称空间,如果没有则在类中找,如果类中也没有则到父类中找,直到找到为止,如果父类中也没有则抛出异常

 
class Student:
    school = "Tsinghua" #数据属性
def say_hello(self):#函数属性

print("hello i am a student")
def __init__ (self,name): #初始化函数 self.name = name

属性查找顺序:对象->类->父类

 

七、对象的绑定关系:

  默认情况下类中的方法都是对象绑定方法:

  当使用对象调用该函数时会自动传入对象本身,作为第一个参数,当使用类名来调用时它就是一个普通的函数,有几个就的传几个参数

练习:写一个学生类,具备一个打招呼的技能 要能输出自己的名字信息

class Student:
    def __init__(self,name):
        self.name=name

    def say_hi(self):
            print("hello my name is %s" %self.name)

stu1=Student("jsaon")
stu1.say_hi()

Student.say_hi(stu1)  #相互之间的传参

结果:
>>hello my name is jsaon >>hello my name is jsaon

   1、类的绑定关系:

类绑定的方法用@classmethod 来装饰   

  什么时候绑定给对象:当函数逻辑需要访问对象中的数据时

  什么时候绑定给类:当函数逻辑需要访问类中的数据时

class Student:
    school = "oldgirl"
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
    # def study(self):
    #     print(self)

  #  对象绑定方法 
    def say_hi(self):
        # print(self)
        print("hello i am a student! my name:%s" % self.name)

stu1 = Student("jack",20,"male")
stu2 = Student("rose",18,"female")
stu1.say_hi()
stu2.say_hi()
》》
hello i am a student! my name:jack
hello i am a student! my name:rose

 

2、非绑定方法

 

  或叫做静态方法,就是即不需访问类的数据,.也不需要访问对象的数据

语法:@staticmethod

不常用

class OldBoyStudent:
    school = "oldboy"
    def __init__(self,name):
        self.name = name
    @classmethod
    def show_school(cls):
        # print(self.school)
        print(cls)
    @staticmethod
    def print_hello():
        print("hello world")

 

 

 

  

 

 

 

 

 

 

 

  

 

 

  

  

  

 

  

 

 

  

 

 

 

 

 

 

 

 

 

 

 

  

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

第二十五节:Java语言基础-面向对象基础

Java基础---面向对象

面向对象基础一

面向对象基础

Python之面向对象:面向对象基础

Java基础之面向对象