面向对象编程opp(黑马学习笔记)--基础部分

一、面向对象的一般过程

  1. 首先确定职责,要做的事情
  2. 职责不同,对象不同,在对象内部封装不同的方法
  3. 最后完成代码,让不同的对象调用不同的方法

二、相关的概念

类:

是一群具有相同特征行为的事物的统称,是一种抽象的定义

注释:

  1. 特征:就是指的是类中的属性
  2. 行为:就是类中的方法
  3. 通俗地讲就是类就是一张图纸

例子:人类就是一个类,但是这个类他无法具体到某一个人的身上或者无法用人类(这个名词)来替代某个人,是抽象的定义;
如果说人类的共同特征就是五官、四肢这些就是所谓的类中相同特征(属性);
而行为就是人类这个类可以进行高级的学习,进行高级的学习就是类中的行为

对象:

由类创建出来,具体到了某一个对象身上;
例如:人类是一个类,小明就是人类中的一个人,小明就是对象。

三、设计类的三要素和名词提炼法

[1]类的三要素:

  1. 类名:采用大驼峰命名法
  2. 属性:具有什么的特征
  3. 方法:具有什么的行为

[2]名词提炼法:

名词提炼法就是分析整个业务流程,出现的名词,通常就是找到的

[3]如何在业务流程里找到属性和方法

1.属性的找法

通常我们的属性就是流程里的对象的特征

2.方法

通常我们的方法就是对象所具有的某些行为

四、基本语法

1.创建类

class 类名(大驼峰):
	def 方法名1(self,参数列表):
		pass

2.创建对象

变量名 = 类名(参数列表)

3.例子

class Cat:
	
	#定义吃的行为
    def eat(self):
        print("小猫爱吃鱼")

	#定义喝的行为
    def drink(self):
        print("小猫爱喝水")

tom = Cat() #创建一个tom的猫对象

tom.eat() #调用tom吃的行为
tom.drink() #调用tom喝的行为

print(id(tom)) #利用id函数得到tom这个对象的地址
print(tom) #输出对象所在的地址

4.截图

在这里插入图片描述

五、方法中的self参数

[1]增加对象属性

  1. 在 Python 中,要 给对象设置属性,非常的容易,但是不推荐使用
  2. 原因:对 属性的封装应该封装在类的内部
  3. 只需要在 类的外部的代码 中直接通过 . 设置一个属性即可
    例如:
class Human():
    def print_info(self,age,name):
        self.name = name
        self.age = age

        print("name:" + self.name + '\n' + "age:" + self.age)


xiaoming = Human() #创建xiaoming这个Human对象
xiaoming.print_info("小明","18")  #传递参数

xiaoming.job = "student" #给xiaoming这个对象增加一个job的属性, 但是一般情况下不这样增加,都在类的内部进行增加
print(xiaoming.job)

[2]self参数的作用

1.作用:

哪一个对象调用的方法,方法内的self就是哪一个对象的引用
通俗地讲,就是对象调用类中的那个方法时,那么方法中的self会自动的变成对象

2.注意:

  1. 在调用方法时,程序员不需要传递self参数
  2. 在方法内部:
    - 可以通过self. 访问到对象的属性
    - 也可以通过self. 调用其他的对象方法

3.属性和方法的访问:

在类的内部,通过 变量名.访问对象的属性和方法
在类封装的方法中,通过self.访问对象的属性和方法

六、初始化方法(init)

[1]当使用类名创建对象的时候,我们需要知道以下两点:

1.python会自动为对象创建分配空间,借助的方法是__new__
2.python会自动为对象设置初始值,借助的方法是__init__

[2]初始化内部定义属性

例子:

class Human():

	#利用init方法增加self.name,self.age这两个属性
    def __init__(self,name,age):
        self.name = name
        self.age = age


    def print_info(self):
        print("name:" + self.name + '\n' + "age:" + self.age)



xiaoming = Human("小明","18") #创建类对象的时候需要传递name,age对应的实参
xiaoming.print_info()

注意:

  1. 如果我们利用init方法进行了属性的设置,那么我们在创建类对象的时候必须要把对应的实参进行传递

七、常见的内置方法和属性

[1]定义:

  1. 内置方法/属性:__方法名/属性名__ 前后各有两个下划线的是类中的内置方法/属性
  2. 内置方法/属性的特点: 在创建对象的时候,会自动的调用这些类中的内置方法/属性

[2]__del__ 方法(知道)

1.注意

在python中在一个对象从内存中销毁前,会调用__del__方法,释放所占内存的空间

2. 应用范围

想要对象销毁前做一些事情就需要__del__方法

3.例子

class Human():

    def __init__(self, name, age):
        self.name = name
        self.age = age


    def __del__(self): #修改__del__方法
        print("这是我在内存中被销毁前的最后一句话")

    def print_info(self):
        print("name:" + self.name + '\n' + "age:" + self.age)


    def going_now(self, logo):
        if logo == True:
            print("那我们现在就出发吧!!")


xiaoming = Human("小明","18")
xiaoming.print_info()
xiaoming.going_now(True)

4.截图

在这里插入图片描述

[3]__str__方法

1.注释

在python中我们利用print函数输出对象变量时,默认情况下输出的是对象变量所在的地址,以及有哪个类创建。
例如:

class Human():

    def __init__(self, name, age):
        self.name = name
        self.age = age


    def __del__(self): #修改__del__方法
        print("这是我在内存中被销毁前的最后一句话")


    def print_info(self):
        print("name:" + self.name + '\n' + "age:" + self.age)


    def going_now(self, logo):
        if logo == True:
            print("那我们现在就出发吧!!")


xiaoming = Human("小明","18")
print(xiaoming) #输出对象变量所在的地址以及由哪个类创建

在这里插入图片描述

2.应用场景

如果在开发中,希望使用print函数输出对象变量时,能够打印自定义内容就可以利用__str__

3.语法:

def __str__(self):
	return "字符串内容"

4.例子:

class Human():

    def __init__(self, name, age):
        self.name = name
        self.age = age


    def __del__(self): #修改__del__方法
        print("这是我在内存中被销毁前的最后一句话")


    def __str__(self): #修改__str__方法

        return "这是str函数在起作用"


    def print_info(self):
        print("name:" + self.name + '\n' + "age:" + self.age)


    def going_now(self, logo):
        if logo == True:
            print("那我们现在就出发吧!!")


xiaoming = Human("小明","18")
print(xiaoming) #输出对象变量所在的地址以及由哪个类创建

5.截图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值