https://pic.shejibiji.com/i/2022/05/07/6275f888d383a.png 小古比鱼 发表于 2022-5-5 16:55
终于开始了类和对象的介绍!面向对象编程(OOP)的核心思想便是将代码封装起来,将相关数据和实现的函数封 ...
最后,类中的每一个方法默认的第一个参数都是self(不能省略),代表传递给方法的实例对象本身,这样Python才知道到底是哪个对象调用了该方法。 太棒了,文字说明+导图推出了!
自己通过动手发现如果不采取 t1=Turtle(),t1.head=2的形式修改属性,直接采用Turtle().head=2去修改属性是无法修改属性的,我的理解是,采用后者这种方法没有创建对象,而是妄想直接修改类,因此没法修改属性。
代码如下
t1=Turtle()
Turtle().head=2
t1.head
1
Turtle().head
1 OOP有三个基本特征——封装、继承、多态。 小古比鱼 发表于 2022-5-5 16:55
终于开始了类和对象的介绍!面向对象编程(OOP)的核心思想便是将代码封装起来,将相关数据和实现的函数封 ...
总结得很好 我有一点小疑惑,一方面,定义类时的方法函数的默认参数self是形参,某一个实例对象调用后没有传递实参,self是怎么对应实例对象本身的呢?
一方面,实例对象调用方法时的形式是(instance.fanction()),不是告诉python是谁在调用了吗,为啥默认形式参数self就能起到这个作用呢 Loafer0 发表于 2022-12-10 14:01
自己通过动手发现如果不采取 t1=Turtle(),t1.head=2的形式修改属性,直接采用Turtle().head=2去修改属性是 ...
使用 dir() 函数可以查看对象属性。可以传入类名 或者 类名加上小括号。如果用类名 或者 实例对象可以查看、添加或者修改属性,而使用类名加上小括号只能查看属性。好像是这吧? 视频看不了了怎么办,哪里可以下载吗? 坚持每日学习{:5_106:} 坚持学习 本帖最后由 563743696 于 2024-8-19 17:58 编辑
{:5_108:} 象 = 属性(对象的静态特征)+ 方法(所能做的事情)
# 对象诞生之前,需要先创建一个类,再通过类来创造实际的对象。
# 创建一个类需要用到 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 参数传递的信息。
页:
[1]