面向对象基础

ghylpb      2022-02-16     739

关键词:

面向对象基础

静待一树花开,盼你叶落归来

面向过程与面向对象编程

面向过程编程的核心是‘’过程‘’,过程指的是做事情的步骤,也就是先做什么后做什么,基于该编程思想编写程序,如同工厂的流水线。

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

缺点:可扩展性差

什么是面向对象?

向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现。

面向对象编程:

核心是‘’对象‘’,对象指的是特征与技能的结合体。面向对象编程如同在创在世界,要有一种上帝的思维方式。

优点:可扩展性高

缺点:编写程序的复杂程度远远高于面向过程编程思想

优先使用那种思想?

面向过程结合面向对象

创造对象需要先学习类,类:类别、类型、分类

类:先定义类,后调用类产生对象
现实世界中:对象是一个个具体存在的事物,类是人总结出来的,所以先有对象后有类;而在程序中遵循先有类后有对象。

类有两种作用:属性引用和实例化

属性引用(类名.属性)

class Person:   #定义一个人类
    role = 'person'  #人的角色属性都是人
    def walk(self):  #人都可以走路,也就是有一个走路方法
        print("person is walking...")


print(Person.role)  #查看人的role属性
print(Person.walk)  #引用人的走路方法,注意,这里不是在调用

实例化对象:调用类即可产生对象,调用类的过程,又称为类的实例化,实例化的结果称为类的对象/实例,实例化会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征,语法:对象名 = 类名(参数)

class Person:   #定义一个人类
    role = 'person'  #人的角色属性都是人
    def __init__(self,name):
        self.name = name  # 每一个角色都有自己的昵称;
        
    def walk(self):  #人都可以走路,也就是有一个走路方法
        print("person is walking...")


print(Person.role)  #查看人的role属性
print(Person.walk())  #调用方法
p1 = Person(xiaozhang)#实例化出一个对象,实例化的过程就是产生对象的过程

如何定义类:

  1. 先从现实世界中抽象出类。
  2. 定义类。
    对象:特征与技能的结合体,
    类:一系列对象相同的特征与技能的结合体
    定义类的语法:
  class 类名:
        对象相同的特征
        对象相同的技能
  #class:用来定义类的,后面跟类名。

注意:类名必须要用驼峰体命名,python在定义变量与函数时不推荐使用驼峰体,相同的特征指类内部的变量,相同的技能指类内部的函数。

  选课系统项目:
      - 在现实世界中:
          学生对象1:
              特征:
                  school = '×××'  学校
                  name = '高峰峰'    姓名
                  age = 93           年龄
                  sex = 'female'     性别
              技能
                  learn  学习
                  choose_course  选课
          学生对象2:
              特征:
                  school = '×××'
                  name = '小丁丁'
                  age = 84
                  sex = 'female'
              技能
                  learn
                  choose_course
          学生对象3:
              特征:
                  school = '×××'
                  name = '大丁丁'
                  age = 18
                  sex = 'male'
              技能
                  learn
                  choose_course
      类:
          相同的特征:
              school = '×××'
          相同的技能:
              learn
              choose_course

定义类发生的事情:

1.在定义类时会产生一个空的名称空间,

2.把类内的名字放在名称空间里

类在定义阶段就已经产生好了名称空间执行类内的代码

调用类名时会指向类的名称空间

类.__dict__#查看类的名称空间中所有的名字

 #__dict__只在读的时候以字典的形式去展示

类.   #指向类的名称空间
类.特征或技能   #对类内部的名字进行修改,
# . 会指向类内部的名称空间从而获取名字

特征也称之为属性

class Dog:
    def __init__(self,name,aggr,life_value):
        self.name = name
        self.aggr = aggr
        self.life_value = life_value

通过类名调用类内部的函数,这个函数就只是一个普通函数
对象的产生:
语法:
类名()调用类产生对象,然后赋值给一个变量

当实例化出对象后,会在内存中开辟一个存储对象独有特征的名称空间。

__init__:(翻译:为对象初始化某些属性)会在调用类时,自动触发该函数__init__(self)

调用类时发生的事情
1.首先会产生一个空对象,就是产生的“对象名称空间”
2.自动触发__init__
3.会把对象本身及括号内的参数一并传给__init__函数

给对象添加属性的方式一:类中有的属性,我们可以一个一个给它们赋值,类中没有的我们也可以通过这种方式添加,添加的内容会存储在对象的名称空间里

stu1.name = 'tank'
stu1.age = 18
stu1.gender = 'male'

print(stu1.name, stu1.age, stu1.gender)

给对象添加属性的方式二:

class Person:
    def __init__(self,name,money,aggr,life_value):
        self.name = name
        self.money = money
        self.aggr = aggr
        self.life_value = life_value
person1 = Person('nick',10000,300,1000)#方式二,当添加类中没有的属性时还是要用方式一
print(person1.__dict__)#对象名.__dict__查看对象的名称空间

{‘name‘: ‘nick‘, ‘money‘: 10000, ‘aggr‘: 300, ‘life_value‘: 1000}

对象与类的查找顺序

对象.属性,若对象本身有则先用自己的,若对象本身没有则用类的,若类也没有,则报错。
技术图片

技术图片

对象绑定方法的特殊之处

(对象.方法 就是对象的绑定方法)

1.由类调用类内部的函数,则这个函数需要传(self)这个参数;
2.由对象调用对象的绑定方法,会将自己作为self传入绑定方法中
对象的绑定方法__特殊之处就是把对象当做第一个参数传入绑定方法中,由不同的对象调用,就把不同的对象传给不同的绑定方法。__

对象之间与类的方法功能一样,内存地址不同

python 中一切皆对象

小练习

  1. 人狗大作战
class Person:
    def __init__(self,name,money,aggr,life_value):
        self.name = name
        self.money = money
        self.aggr = aggr
        self.life_value = life_value

    def attack(self,dog):
        '''攻击方法'''
        if self.life_value  > 0:
            dog.life_value -= self.aggr
            print(f'''
            {self.name}攻击{dog.name}成功
            {self.name}生命力{self.life_value}
            {dog.name}生命力{dog.life_value}
                        ''')
            return True

class Weapon:
    '''定义武器类'''
    def __init__(self,money,aggr,life_value):
        self.money = money
        self.aggr = aggr
        self.life_value = life_value

    def update(self,obj):
        obj.money -= self.money
        obj.life_value += self.life_value
        obj.aggr += self.aggr

    def pick(self,obj):
        obj.life_value -= 500
        print(f'{obj.name}的生命力还有{obj.life_value}')



person1 = Person('nick',10000,300,1000)
dog1 = Dog('hashiqi',500,5000)
weap1 = Weapon(5000,300,2500)


if person1.money > weap1.money:
    weap1.update(person1)
    person1.weapon = weap1#将weapon放入person的个人属性里面,这样就可以调用person了
    person1.attack(dog1)
    person1.weapon.pick(dog1)
  1. 定义了一个圆形类;提供计算面积(area)和周长(perimeter)的方法

    from math import pi
    class Circle:
        def __init__(self,radius):
            self.radius = radius
    
        def area(self):
            aer = pi*(self.radius**2)
            return aer
    
        def perimeter(self):
            per = 2*pi*self.radius
            return per
    
    cir1 = Circle(6)
    print(cir1.area())
    print(cir1.perimeter())
  2. 圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积。然后在"环形类"中组合圆形的实例作为自己的属性来用
from math import pi
class Circle:
    def __init__(self,radius):
        self.radius = radius

    def area(self):
        aer = pi*(self.radius**2)
        return aer

    def perimeter(self):
        per = 2*pi*self.radius
        return per

class Ring:
    def __init__(self,out_round,in_round):
        self.out_round = Circle(out_round)
        self.in_round = Circle(in_round)

    def area(self):
        are = self.out_round.area() - self.in_round.area()
        return are

    def perimeter(self):
        per = self.out_round.perimeter() + self.in_round.perimeter()
        return per
ring1 = Ring(10,5)
print(ring1.perimeter())
print(ring1.area())

python基础(二十):面向对象基础

文章目录面向对象基础一、理解面向对象二、类和对象1、理解类和对象 查看详情

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

面向对象面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为。而对于面向对象而言,将功能封装到对象,所以面向对象是基于面向过程... 查看详情

java基础---面向对象

Java基础——面向对象1.什么是面向对象面向对象是基于面向过程的编程思想。(1).面向过程:面向过程强调的是每一个功能的步骤,强调的是如何实现的步骤。(2).面向对象:面向对象强调的是对象,然后由对象去掉用功能,强调的... 查看详情

面向对象基础一

什么面向对象 1.面向对象是一种编程方法 2.面向对象是一种思维方式 3.面向对象不是一种编程语言   如何学习面向对象 1.掌握一门面向对象语言的语法 2.掌握面向对想的思维方式 3.熟悉面向对象设计原则 4.掌握面向对象... 查看详情

java基础之面向对象

 Java基础之面向对象一.什么是面向对象?面向对象就是指以属性/特征和行为的观点来分析现实世界中事物的方式。二.什么是面向对象编程?面向对象编程就是指先使用面向对象的观点进行分析后再使用面向对象的编程语言... 查看详情

面向对象基础

面向对象,是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。面向对象是一种思想,一种思维方式,一种程序制作的一种结构。面向对象,首要要把万物皆视为对象。描述这个对象的时候,用各... 查看详情

java---面向对象基础

概述Java是一种面向对象的编程语言,面向对象编程,ObjectOrientedProgramming,简称OOP.和面向对象不同的是,面向过程编程,即将模型分解为一步一步的过程.比如要写一个TODOList,安装步骤一步一步来:读取文件;编写TODO;保存文件.面向对象编... 查看详情

java基础06面向对象

1.面向对象思想概述面向过程思想概述第一步第二步面向对象思想概述找对象(第一步,第二步)举例买煎饼果子洗衣服面向对象思想特点是一种更符合我们思想习惯的思想可以将复杂的事情简单化将我们从执行者变成了指挥者角... 查看详情

面向对象基础

面向过程的写法:publicclassPoints{ publicstaticvoidmain(String[]args){ qw(1,2); } publicstaticvoidqw(doublex1,doubley1,){ System.out.println((x1+y1)*2); } }面向对象的写法:publicclassPoints{ publicPoints(doublex1, 查看详情

面向对象基础一(封装)

查看详情

java基础之面向对象

面向对象1、面向对象思想:   (1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象,强调具备功能的对象;   (2)思想特点:      ... 查看详情

面向对象笔记基础

面向对象基础笔记面向过程面向对象类的初步理解__init__方法的理解区分类的属性与对象的属性继承:派生组合抽象类多态与多态性封装:类和对象的隐藏属性面向过程核心是过程,即解决问题的步骤,比如设计一条流水线,是机械... 查看详情

面向对象基础(上)

...Java从小白到大牛》纸质版已经上架了!!!面向对象是Java最重要的特性。Java是彻底的、纯粹的面向对象语言,在Java中“一切都是对象”。本章将介绍面向对象基础知识。面向对象概述面向对象的编程思想:... 查看详情

面向对象基础

1、面向对象不是所有情况都适用2、面向对象编程  a.定义类    class类名:      def方法1(self,bb):        pass  b.根据类创建对象    使用对象去执行类中方法 3、self,形式参数。python内部传递&n... 查看详情

java学习·初识面向对象基础一

面向对象基础1.1面向过程与面向对象的区别面向过程和面向对象二者都是思考问题的方式,再简单的事物时,可以线性思考时使用面向过程,但当事物较为复杂时,只能使用面向对象设计。但二者并不是对立的,在解决复杂问题... 查看详情

面向对象基础

面向对象思想:不是一个实实在在的东西,它就是一种思想,编程思想;就是把生活中某些个体/东西,把它编写到程序里面,很像结构体;万物皆对象面向对象三大特性:封装,继承,多态面向对象的好处:结构更加清晰,可... 查看详情

c#面向对象基础

提到“面向对象”就必须要说到“面向过程”:面向过程:面向完成这件事的过程,强调的是完成这件事的动作(针对每个人量身定做的动作)。面向对象:找个对象帮你做事,可以写出通用代码,屏蔽差异。 ... 查看详情

es6基础1--面向对象(代码片段)

面向过程与面向对象1.面向过程与面向对象1.1面向过程1.2面向对象1.3面向过程与面向对象对比2.对象与类2.1对象2.1.1创建对象2.2类2.2.1创建类2.2.2类创建添加属性和方法2.2.3类的继承1.面向过程与面向对象1.1面向过程面向过程就是分... 查看详情