学习笔记:Python认识对象(一)

文章目录

  • 前言
  • 一、什么是面向对象
    • 面向过程和面向对象的区别
      • 面向过程
      • 面向对象
  • 二、类和对象
    • 类和对象的概念
    • 类的定义
    • 类中的方法和变量
    • 类中方法和属性的使用
    • 内存中的对象
    • 构造函数
    • 析构函数


前言

这里是我的个人学习笔记,内容仅供参考,也可能有写的不全的地方


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是面向对象

面向对象是一种编程思想,而不是一种编程语言
编程思想目前有面向对象和面向过程编程
面向过程编程,典型的是C语言
而面向对象编程,典型的是Java
但不是说这两个编程思想只有这两种语言可以用
Python设计之初就是一门面向对象的语言,对于Python来说一切皆为对象。正因为如此,在Python中创建一个类和对象是很容易的。
当然如果习惯面向过程或者函数的写法也是可以的,Python并不对此做硬性的限制。

面向过程和面向对象的区别

面向过程

一种看待问题的方式,在解决问题的时候着重于如何解决这个问题,应该如何做,然后自己亲自完成
在程序中的实现方式是:
所有代码从上至下全部执行,每个模块之间相互独立

面向对象

一种看待问题的方式,在解决问题的时候着重于找一个具有解决该问题的人,然后委托该人去执行,而这类具有解决问题的人就被统称为对象
在程序中的执行方式:
根据不同的要求设计代码,并执行,但执行的顺序可能不一致
程序执行的流程由需求决定【对象】

如果对象存在,则直接使用;如果对象不存在,则创建新的对象

注意:Python是一门面向对象的语言,类和对象是核心,虽然可以完成面线过程编程


二、类和对象

类和对象的概念

代码如下(示例):

类:多个具有特殊功能个体的集合,如:人类、狗、玩具
对象:在一个类中,具有某个具体的特殊功能的个体,可以解决某个指定的事情,也被称为实例【instance】

类和对象的关系:类用于描述某一类对象的共同特征(比如:老师、学生,都是人,哈士奇、贵宾犬都是狗)
而对象是类的具体描述(如:狗有很多种类,中国田园犬可以是狗类的一个对象)

【在程序中,通常先定义类,然后在创建对象】


类的定义

语法:

class 类名():
	类体

说明:
1.Python中使用class关键字来声明(定义)类
2.类名要求是合法的标识符,但是一般要求使用大驼峰命名法【各单词之间的首字母大写】
3.通过缩进来区分类体
4.类体一般分为属性和方法,属性一般是指一些静态信息,比如一个人的姓名、性别、年龄等信息;而方法一般用函数表示,用来实现具体的功能

# 案例演示
# 定义类
class Dog():
	# 这里的name和sex就是属性
    name='老大'
    sex='雌'
	# 这里的eat和say函数就是方法
	# Python对象里的方法都要带一个self参数
    def eat(self):
        print(self.name+'血盆大口的吃')

    def say(self):
        print('咆哮...')

类中的方法和变量

在了解类的基本定义之后,得了解类中的属性变量和方法的用法
类中定义的方法也叫作【成员方法】
类中定义的变量,被称为【属性】,也被称为【成员变量】
成员变量:类具有的特征
成员方法:类具有的行为
类存在的意义:拥有同一个特征的对象可以抽取出一个类,类的存在就是为了创建一个具体的对象

# 代码演示
class Dog():
 # 类属性
 name = "哈士奇"
 sex = "公"

 # 类方法
 def eat(self):
     print(self.name,"吃肉!") 
 def say(self):
     print("我是犬吠的方法")

类中方法和属性的使用

要使用类中的方法和属性,需要使用通过【对象】调用
对象被创建的过程就叫做对象的实例化过程
语法:
变量名=值
对象名=类名()

# 代码示例
class Dog():
 # 类属性
 name = "哈士奇"
 sex = "公"

 # 类方法
 def eat(self):
     print(self.name,"吃肉!") 
 def say(self):
     print("我是犬吠的方法")
# 通过Dog类创建对象,对象名为dog
dog=Dog()
# 访问对象的属性
print(dog.name,dog.sex)
# 访问对象的方法
dog.say()
dog.eat()

内存中的对象

dog=Dog()
说明:
1.程序中定义的Dog类的变量dog实际上只是一个变量名,它被存放在栈内存中,指向实际的Dog对象,而真正的Dog对象则是存放在堆内存中
2.类中成员变量随着对象的出现而出现,随着对象的消失而消失
3.每个对象的成员变量都会在堆内存中开辟属于自己的空间,互不影响


构造函数

构造函数是类中必须掌握的方法
上面介绍类的属性时,都是直接定义的静态变量,有初始值
而构造函数则是通过创建对象而传入属性值,相当于构造器

def __init__(self,参数):
	函数体

调用时机:当一个对象被创建时,第一个被调用的函数,主动调用

# 代码演示
class Boy():
	# 传入参数name和age
    def __init__(self,name,age):
    	# 定义属性,记得是self.属性名=属性值
        self.name=name
        self.age=age
        print('构造函数的触发机制是:当创建完对象后,给对象传输属性时触发')
	# 方法,在方法中调用属性值是,也是self.属性名
    def say(self):
        print(f'{self.age}{self.name}喊道:快来啊!!!')

    def sing(self):
        print('想唱就唱')
# 创建对象,并传入参数,当然也可以通过定义变量的方式传入参数
boy=Boy('张三',18)
# 定义变量,通过输入的内容来传入对象
name=input('输入姓名:')
age=int(input('输入年龄:'))
boy1=Boy(name,age)

析构函数

析构函数的调用时机与构造函数刚好相反,析构函数是在对象被销毁的时候被调用的

def __del__(self):
	函数体
# 代码示例
class Fish():
    # 构造函数
    def __init__(self,color,size):
        self.color=color
        self.size=size

    def swim(self):
        print(f'我是一条{self.size}鱼,颜色是{self.color}')

    # 析构函数,在对象被销毁时自动被调用
    def __del__(self):
        print('当对象被销毁时我被触发')

    def eat(self):
        print('大鱼吃小鱼小鱼吃虾米')

对象被销毁的时机有几种情况:
1.当程序结束是,对象会自动被销毁

fish=Fish('金色','大')
fish.swim()
fish.eat()
print('结束啦,要销毁对象')

2.通过del 方法,删除对象时,会被调用

fish=Fish('金色','大')
fish.swim()
fish.eat()
del fish
print('结束啦,对象已经被销毁了')

以上两种情况输出结果是不一样的
第一种的输出结果是:

我是一条大鱼,颜色是金色
大鱼吃小鱼小鱼吃虾米
结束啦,要销毁对象
当对象被销毁时我被触发

第二种的输出结果是:

我是一条大鱼,颜色是金色
大鱼吃小鱼小鱼吃虾米
当对象被销毁时我被触发
结束啦,对象已经被销毁了

这里的提到的对象被销毁涉及Python中的内存回收机制

内存回收机制:
1.当对象在某个作用域中调用完毕,在跳出其作用域时的同时,析构函数会>被调用一次,可以释放一次内存空间(相当于自动释放内存)
2.当使用del 删除对象时,也对调用该对象的析构函数,相当于手动释放内存空间

应用场景:
主要用于清理工作: 关闭数据库、保存文件等


你可能感兴趣的:(Python基础学习,python)