鱼C论坛

 找回密码
 立即注册
查看: 6030|回复: 14

[知识点备忘] 第058讲:类和对象(I)

[复制链接]
发表于 2022-5-2 01:49:41 | 显示全部楼层 |阅读模式
购买主题 已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-5 16:55:22 | 显示全部楼层
终于开始了类和对象的介绍!面向对象编程(OOP)的核心思想便是将代码封装起来,将相关数据和实现的函数封装在一起。OOP有三个基本特征——封装、继承、多态。本节简要介绍了封装,即将同属于一个类的所有对象共有的特征属性和行为能力封装到一起。Python中的对象有属性和方法,前者是对象的静态特征,以变量的形式呈现;后者是对象所能做的事情,以函数的形式呈现。我们首先需要用class关键字创建一个类(好比一个用于批量生产的模具),然后再通过类创造实际的对象;创建好的对象(实例对象)将拥有类定义的全部属性和方法,还可以随意修改其属性值,不会影响其他对象,正如一个人有了女朋友,并不代表所有人都有……另外,在Python中,整型变量是整数类的实例对象,字符串变量是字符串类的实例对象,列表、元组、字典、集合也类似。由此可见,说“Python到处是对象”一点都不为过!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 5 反对 0

使用道具 举报

发表于 2022-5-7 12:48:37 | 显示全部楼层
对象 = 属性 + 方法

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-26 09:11:51 | 显示全部楼层
小古比鱼 发表于 2022-5-5 16:55
终于开始了类和对象的介绍!面向对象编程(OOP)的核心思想便是将代码封装起来,将相关数据和实现的函数封 ...

最后,类中的每一个方法默认的第一个参数都是self(不能省略),代表传递给方法的实例对象本身,这样Python才知道到底是哪个对象调用了该方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-12-3 01:29:20 | 显示全部楼层
太棒了,文字说明+导图推出了!


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-10 14:01:22 | 显示全部楼层
自己通过动手发现如果不采取 t1=Turtle(),t1.head=2的形式修改属性,直接采用Turtle().head=2去修改属性是无法修改属性的,我的理解是,采用后者这种方法没有创建对象,而是妄想直接修改类,因此没法修改属性。
代码如下
t1=Turtle()
Turtle().head=2
t1.head
1
Turtle().head
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-1-8 11:24:10 | 显示全部楼层
OOP有三个基本特征——封装、继承、多态。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-6 09:43:45 | 显示全部楼层
小古比鱼 发表于 2022-5-5 16:55
终于开始了类和对象的介绍!面向对象编程(OOP)的核心思想便是将代码封装起来,将相关数据和实现的函数封 ...

总结得很好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-17 23:01:58 | 显示全部楼层
我有一点小疑惑,一方面,定义类时的方法函数的默认参数self是形参,某一个实例对象调用后没有传递实参,self是怎么对应实例对象本身的呢?
一方面,实例对象调用方法时的形式是(instance.fanction()),不是告诉python是谁在调用了吗,为啥默认形式参数self就能起到这个作用呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-16 21:52:39 | 显示全部楼层
Loafer0 发表于 2022-12-10 14:01
自己通过动手发现如果不采取 t1=Turtle(),t1.head=2的形式修改属性,直接采用Turtle().head=2去修改属性是 ...

使用 dir() 函数可以查看对象属性。可以传入类名 或者 类名加上小括号。如果用类名 或者 实例对象可以查看、添加或者修改属性,而使用类名加上小括号只能查看属性。好像是这吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 09:29:53 | 显示全部楼层
视频看不了了怎么办,哪里可以下载吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-4 08:32:28 | 显示全部楼层
坚持每日学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-25 11:39:46 | 显示全部楼层
坚持学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-19 17:56:48 | 显示全部楼层
本帖最后由 563743696 于 2024-8-19 17:58 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-1-18 13:11:26 | 显示全部楼层
象 = 属性(对象的静态特征)+ 方法(所能做的事情)
# 对象诞生之前,需要先创建一个类,再通过类来创造实际的对象。
# 创建一个类需要用到 class 关键字:
class Turtle:   #类名的命名方式有一个约定俗成的标准,那就是使用大写字母开头,比如我们这里的 Turtle
    head = 1
    eyes = 2
    legs = 4
    shell = True
#其实所谓的属性,就是写在类里面的变量,方法就是写在类里面的函数(实际上会有一点区别,后面我们会有仔细讲解)。
    def crawl(self):
        print("人们总抱怨我动作慢吞吞的,殊不知如不积硅步,无以至千里的道理。")

    def run(self):
        print("虽然我行动很慢,但如果遇到危险,还是会夺命狂奔的T_T")

    def bite(self):
        print("人善被人欺,龟善被人骑,我可是会咬人的!")

    def eat(self):
        print("谁知盘中餐粒粒皆辛苦,吃得好,不如吃得饱~")

    def sleep(self):
        print("Zzzz...")

#t1 就是一个 Turtle 类的对象,也叫实例对象(instance object),它就拥有了这个类所定义的属性和方法
t1 = Turtle()
print(t1.head)
t1.sleep()
t2 = Turtle()
print(t2.head)
#当对象创建出来之后,我们可以随意修改它的属性值:
t2.head = 0
print(t2.head)
#我们也可以动态的创建一个属性,这跟在字典中添加一个新的键值对一样
t1.mouth = 1
print(t1.mouth)
#使用 dir() 函数,可以看到,t1 比 t2 多出了一个 mouth 的属性:
print(dir(t1))
print(dir(t2))

#self 是什么?
class C:
    def get_self(self):
        print(self)
c = C()
c.get_self()
print(c)
# 原来传递给方法的是对象本身,那为什么要这么做呢?
# 我们知道,同一个类可以生成无数多个对象,那么当我们在调用类里面的一个方法的时候,Python 如何知道到底是哪个对象在调用呢?
# 没错,就是通过这个 self 参数传递的信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-3-31 15:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表