Day07 - 面向对象

news2024/9/23 17:13:31

1. 面向对象概述

面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。 面向对象是相对于面向过程来讲的, 面向对象方法 ,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

2. 面向对象生活举例

类: 是对现实事物的属性和行为的抽象

	类不能具体的表示一个真实存在的事物.

对象: 是类的一种实例表示
	 是真实存在的,看得见摸得到的

3. 类与对象的关系

类(Class) 由3个部分构成

	类的名称:类名
	类的属性:一组数据
	类的方法:允许对进行操作的方法 (行为)

4. 类的定义格式

经典类:
class 类名:
	属性
	行为

新式类:
class 类名(object):
	属性
	行为

在 python3 以后,只有新式类
'''
设计一些类
类在python中分为旧式类(经典类)和新式类
'''


# 经典类1
class Hero:
    # 定义一个方法,
    def skill(self):
        print('发一个大招。。。')


# 经典类2
class Person():
    # 定义两个方法
    def eat(self, food):
        print('吃', food)

    def sleep(self):
        print('每天至少睡8小时')


# 新式类
class Dog(object):
    def bark(self):
        print('Won Won....')

5. 创建对象和使用对象的格式

对象名 = 类名(参数列表....)

对象调用方法的格式:
对象名.方法名(参数列表)
注意:
	方法中参数列表中的第一个参数self,不需要手动传递,这个参数是由解释器在执行程序时,自动传递的
	默认会将当前调用方法的对象引用传递进去
'''
实例 对象
'''


# 抽象一个人类

class Person(object):
    # 第一个方法
    def eat(self, food):
        print('一个人在吃', food)

    # 第二个方法
    def sleep(self, t):
        print('一个人睡了', t, '个小时')


#  实例对象
tom = Person()

# 实例对象时,会在内存中分配一块内存空间,这个空间就是这个对象的位置,
# 然后将这个地址引用返回给对象名
print(tom)

# 使用 对象来执行类中的方法
tom.eat('饭')
tom.eat('海鲜')
tom.sleep(8)

6. 创建多个对象

问:如果通过同一个类,创建多次对象时,多次创建的对象是否是同一个?
答:否,创建的是多个类型相同,但地址不同的多个对象

'''
实例 对象
'''


# 抽象一个人类

class Person(object):
    # 第一个方法
    def eat(self, food):
        print('一个人在吃', food)

    # 第二个方法
    def sleep(self, t):
        print('一个人睡了', t, '个小时')


#  实例对象
tom = Person()
jack = Person()
rose = Person()

# 实例对象时,会在内存中分配一块内存空间,这个空间就是这个对象的位置,
# 然后将这个地址引用返回给对象名
print(tom)
print(jack)
print(rose)

#
# # 使用 对象来执行类中的方法
# tom.eat('饭')
tom.eat('海鲜')
tom.sleep(8)

jack.eat('土')
jack.sleep(2)

rose.eat('满汉全席')
rose.sleep(24)

在这里插入图片描述

7. 动态绑定属性

在实例对象以后,为该对象添加一个属性
'''
实例 对象
'''


# 抽象一个人类

class Person(object):
    # 第一个方法
    def eat(self, food):
        print(self.name, ' 在吃', food)

    # 第二个方法
    def sleep(self, t):
        print(self.name, ' 睡了', t, '个小时')


#  实例对象
tom = Person()
jack = Person()
rose = Person()

# 为对象态动添加一个属性 name
tom.name = 'Tom'
# 动态为对象绑定属性时,给哪个对象绑定了属性,只能哪个对角有该 属性,其它对象是没有该 属性的
# 如果在方法中引用了该 属性,那么这时没有该 属性的对象,调用这个方法时,就会报错
jack.name = "Jack"
rose.name = 'Rose'

# 实例对象时,会在内存中分配一块内存空间,这个空间就是这个对象的位置,
# 然后将这个地址引用返回给对象名
print(tom)
print(jack)
print(rose)

#
# # 使用 对象来执行类中的方法
# tom.eat('饭')
tom.eat('海鲜')
tom.sleep(8)

jack.eat('土')
jack.sleep(2)

rose.eat('满汉全席')
rose.sleep(24)

在这里插入图片描述

8. init 方法

这个方法是一个魔法方法, 命名规则是前后各有两个下划线,
魔法方法是python当中,预设好的,具有特定功能的方法
一般这种方法,不需要手动调用,会自动调用执行

该方法会在创建对象的时候自动调用.
调用时,这个方法用来为对象进行初始化

'''
__init__方法
该 方法会在创建 对象时自动调用 ,
并对该 对象进行初始化操作
'''


class Cat(object):
    # 实现 魔法方法 __init__ ,准备为对象初始化属性
    def __init__(self, name, age):
        print('Init Run ...', self)
        # 绑定属性时,使用 self.属性名 = 值
        self.name = name
        self.age = age

    def show(sealf):
        print(sealf.name, sealf.age)


tom = Cat('Tom', 1)
print(tom)

# 使用属性
print(tom.name)
print(tom.age)

jack = Cat('Jack', 2)
print(jack)
print(jack.name)
print(jack.age)

# 在调用 方法时,方法的第一个参数 self 是不用手动传参的
# 这个参数会由解释 器自动将调用 该 方法的对象传递过去
tom.show()  # self = tom
jack.show()  # self = jack


# rose = Cat()


def show():
    a = 1
    print(id(a))
    return a


b = show()
print(b)
print(id(b))

9. str 方法和 del 方法

__str__ 方法(重点掌握)
	格式化对象
	该方法返回一个字符串值
	当使用 str() 做类型转换时,会自动调用 该方法		

当一个自定义类,没有实现该方法时,默认打印格式是 <模块名.类名 object at 地址>  
eg:<__main__.Cat object at 0x02176610>

name,age
{name:tom, age:1}


调用该方法的场景:
	1. 通过 print() 函数打印时,会自动调用该方法
	2. 通过 str() 函数对自定义的对象进行类型转换时,会自动调用该方法
'''
__str__() 方法

'''


class Cat(object):
    def __init__(self, name, age, height):
        # 将三个属性绑定给对象
        self.username = name
        self.age = age
        self.height = height

    # 默认没有实现 __str__方法,那么会打印 <模块名.类名 object at 0x...>
    # 如果想按自己的格式 显示,需要在类中实现 该 方法
    def __str__(self):
        print('String Run ..', self.username)
        # print(self.username, self.age, self.height)
        # 该 函数必须 有一个返回值
        # 并且这个返回值 必须 是一个字符串
        #  如果需要将对象的信息按照一定的格式进行格式 化,那么可以在这里进行格式修饰 ,
        # 修饰完后,可以将这个格式 化字符串返回,让str() 方法在执行时,得到该 对象转换的字符串类型
        s = self.username.ljust(10) + str(self.age).center(5) + self.height.rjust(5)
        return s


tom = Cat('Tom', 1, '50cm')
jack = Cat('Jack', 2, '50cm')

# print(tom.username)
# print(tom.age)
# print(tom.height)

print(tom)
print(jack)

# c_lsit = list('hello')
#
# print(c_lsit)

tom_s = str(tom)
print('|' + tom_s + '|')
__del__ 方法(了解)
该方法是用来在销毁对象时,回收释放资源使用的方法
该方法也是自动调用
当在使用 del 对象时,会调用方法
'''
__del__方法

 该 方法用来在删除 对象时,回收对象占的资源
'''


class Cat(object):
    def __init__(self, name):
        self.name = name

    def __del__(self):
        # 要在这个方法中将当前对象持有的其它对象手动销毁
        del self.name
        print('del run ...')


tom = Cat('tom')
# 执行下面的代码 时,会自动 调用  __del__ 方法,将这个对象销毁,回收对象内存资源
# del tom
print('over')
# print(tom)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发人员必备的 15 个备忘单

随着网络编程技术的快速发展&#xff0c;我们必须学习很多新东西。有些语言和框架非常复杂&#xff0c;您可能记不住所有的语法或方法。备忘单是易于访问的笔记。当有人在过去目睹任何有帮助或有价值的事情时&#xff0c;包括我自己&#xff0c;我们都会做笔记。但是&#xff0…

Vue 快速入门(四)

前面已经介绍Vue常用指令的基本应用&#xff0c;这篇介绍Vue的一些特殊属性的使用。 01 - 计算属性Computed 计算属性关键词&#xff1a;Computed。 计算属性在处理一些复杂逻辑时是很有用的。 普通的写法 比如字符串反转普通写法&#xff0c;如下&#xff1a; <!DOCTYPE h…

Godot根据遮罩图移动粒子

前言 目前UI粒子特效unity引擎比较多&#xff0c;也好找资料&#xff0c;但是一般都是利用模型&#xff0c;使用3D粒子伪装2D效果。 Godot中也可以做到这一点&#xff0c;并且Godot有专门的2D粒子系统&#xff0c;可以通过一张遮罩图对粒子的位置进行设置。 godot粒子教程 …

nginx学习笔记6(小d课堂)

高并发-服务端缓存前置 我们现在启动了我们的一个jar包。 这次我们的nginx配置文件只保留这个。 我们先更改了它的文件名称。 然后我们现在利用默认的先去复制一份nginx配置文件&#xff1a; 我们这样就初始化完了我们的nginx配置文件。 记得加上我们的分号。 然后我们再重启…

AcWing第87场周赛题解

抱歉&#xff0c;3题只有前2题&#xff0c;第三题投入产出比太低&#xff0c;就不做了 一&#xff0c;移动棋子 4797. 移动棋子 - AcWing题库 题目 难度&#xff1a;简单 思路 直接套dfs模板&#xff0c;起点通过输入时得到&#xff0c;终点&#xff08;3&#xff0c;3&am…

Multiple Dimension Input 处理多维特征的输入

文章目录6、Multiple Dimension Input 处理多维特征的输入6.1 Revision6.2 Diabetes Dataset 糖尿病数据集6.3 Logistic Regression Model 逻辑斯蒂回归模型6.4 Mini-Batch&#xff08;N samples&#xff09;6.5 Neural Network 神经网络6.6 Diabetes Prediction 糖尿病预测6.6…

Exadata存储服务器(又称Exadata存储单元)

存储单元可以说是让Exadata如此大规模普及并且使用效果优异的核心要素。 I/O性能问题始终是Exadata存储或者存储服务器尽力去解决的问题。 Exadata存储服务器概述 Exadata数据库一体机通常预装了3类硬件&#xff1a; 数据库计算节点服务器存储服务器极速的InfiniBand存储交…

离散数学与组合数学-03函数

文章目录离散数学与组合数学-03函数3.1 函数基本概念3.1.1 函数的定义3.1.2 函数举例3.1.3 函数的数量3.1.4 关系与函数的差别3.2函数的类型3.2.1 函数类型3.2.2 函数类型的必要条件3.2.3 函数类型的数学化描述3.2.4 函数类型的证明3.3 函数的运算3.3.1 函数的复合运算3.3.2 函…

统计学习方法 学习笔记(1)统计学习方法及监督学习理论

统计学习方法及监督学习理论1.1.统计学习1.1.1.统计学习的特点1.1.2.统计学习的对象1.1.3.统计学习的目的1.1.4.统计学习的方法1.1.5.统计学习的研究1.1.6.统计学习的重要性1.2.统计学习的分类1.2.1.基本分类1.2.1.1.监督学习1.2.1.2.无监督学习1.2.1.3.强化学习1.2.1.4.半监督…

【HBase入门】2. 集群搭建

安装 上传解压HBase安装包 tar -xvzf hbase-2.1.0.tar.gz -C ../server/ 修改HBase配置文件 hbase-env.sh cd /export/server/hbase-2.1.0/conf vim hbase-env.sh # 第28行 export JAVA_HOME/export/server/jdk1.8.0_241/ export HBASE_MANAGES_ZKfalsehbase-site.xml vim…

【算法】洗牌算法

目录1.概述2.代码实现2.1.暴力法2.2.Fisher-Yates 洗牌算法3.应用本文参考&#xff1a; LeetCode 384. 打乱数组 1.概述 &#xff08;1&#xff09;洗牌算法可以理解为&#xff1a;设计算法来打乱一个没有重复元素的数组 nums&#xff0c;并且打乱后&#xff0c;数组的所有排列…

使用C++实现学委作业管理系统

开发环境学委作业管理系统在 Microsoft Visual Studio 2013 编译器开发的 MFC 项目&#xff0c;计算机使用的系统是 window10。1.2 基本原理与技术要求熟悉文件读写、mfc 基本知识、c 类运用、链表使用、排序算法、Microsoft Visual Studio 2013 编译器的使用。1.3 需求说明学委…

【数据结构】二叉搜索树的实现

目录 一、二叉搜索树的概念 二、二叉搜索树的中序遍历用于排序去重 三、二叉搜索树的查找 1、查找的非递归写法 2、查找的递归写法 四、二叉搜索树的插入 1、插入的非递归写法 2、插入的递归写法 五、二叉搜索树的删除 1、删除的非递归写法 2、删除的递归写法 六、…

autojs模仿QQ长按弹窗菜单(二)

牙叔教程 简单易懂 上一节讲了列表和长按事件 autojs模仿QQ长按弹窗菜单 今天讲弹窗菜单 由粗到细, 自顶向下的写代码 我们现在要修改的文件是showMenuWindow.js function showMenuWindow(view) {let popMenuWindow ui.inflateXml(view.getContext(),<column><bu…

基于双层优化的微电网系统规划设计方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

机制设计原理与应用(一)机制设计基础

什么是机制设计&#xff1f; 微观经济学和CS /EE的交叉学科。它采用了一种工程方法来设计激励机制&#xff0c;以实现战略环境中不完全信息的预期目标。机制设计具有广泛的应用,特别是在资源管理方面。 文章目录1 机制设计的基础1.1 简介1.2 机制设计与博弈及优化的关系1.3 机…

手撕Pytorch源码#4.Dataset类 part4

写在前面手撕Pytorch源码系列目的&#xff1a;通过手撕源码复习了解高级python语法熟悉对pytorch框架的掌握在每一类完成源码分析后&#xff0c;会与常规深度学习训练脚本进行对照本系列预计先手撕python层源码&#xff0c;再进一步手撕c源码版本信息python&#xff1a;3.6.13p…

大数据之HBase集群搭建

文章目录前言一、上传并解压HBase安装包二、修改HBase配置文件&#xff08;一&#xff09;hbase-env.sh&#xff08;二&#xff09;hbase-site.xml三、配置环境变量四、复制jar包到lib文件夹五、修改regionservers文件六、分发安装包和配置文件七、启动Hbase八、验证HBase是否启…

尚硅谷前端ES6-ES11

ECMAScript 是由 Ecma 国际通过 ECMA-262 标准化得脚本程序设计语言。 1.let变量声明以及变量声明特性 <body><script>//let的声明let a , b10;//特性1&#xff1a;变量不能重复声明&#xff0c;避免命名污染// let star "罗翔"// let star "张…

Java | 浅谈多态中的向上转型与向下转型

文章目录&#x1f333;向上转型&#x1f4d5;概念明细&#x1f4aa;使用场景1&#xff1a;直接赋值&#x1f4aa;使用场景2&#xff1a;方法传参&#x1f4aa;使用场景3&#xff1a;方法返回&#x1f4aa;向上转型的优缺点&#x1f333;向下转型&#x1f529;向下转型解决【调用…