# 1:什么是对象?
class File:
def read(self):
print('读取文件内容')
# F = File() # 实例化类
# 1: 其中file就叫File()的对象,其实很好理解,还记得变量的
# 关联关系吧,F变量名 和 File()变量值是关联关系所以通过F就
# 可以调用class File
# 2: self参数是什么?
class File1:
def read(self):
print("我是self的内存地址:%s" %(id(self))) # 打印self的内存地址
F1 = File1() # 实例化类
F1.read()
print("我是对象F1的内存地址:%s" % (id(F1))) # 打印对象F1的内存地址
# 根据上面得出,他们内存地址相同,所示说他们是同一块内存。所以说self就是
# F1 我们可以像下面这样表示加深印象
class File1:
def read(F1):
print("我是self的内存地址:%s" % (id(F1))) # 打印self的内存地址
F1 = File1() # 实例化类
F1.read()
# 总结1:类方法中的self其实就是类对象自己,它会把自己默认传入到方法中。。
# 3:了解对象封装
# 下面我们打印我们的基本信息,我们的参数来源全局变量,但是
# 这样参数其实就写死了,如果我们换个人来调用,打印的还是
# madison,所以我们需要写活这个参数。
name = 'madison'
age = 20
gender = '男'
class Src:
def func(self):
print(f"我叫{name},今年{age}岁,性别{gender}")
# 优化方式:对象封装
class Src1:
def func(self):
print(f"我叫{self.name},今年{self.age}岁,性别{self.gender}")
S = Src1()
# S.name = 'madison'
S.name = 'tom' # 这里我们随便换名字,此时函数内部也会改变所以写活。
S.age = 20
S.gender = '男'
S.func()
# 优化2的写法是不专业,我们可以再给他优化专业化点
# 所以这里会用到 init 出现 init__(名字叫初始化)
# 特点:实例化类他就会运行。
class Src2:
def __init__(self):
print("我是__init__")
S2 = Src2() # 输出结果 ==》 我是__init__
# 所以说它是类里面一个特别的方法,它会自己调用。所以上面Sr1
# 我们可以写成下面这种方式:
class Src2:
# __init__(self,x,y,z)可以传参哦,因为他本来就是函数。
def __init__(self, name, age, gender):
self.name = name # self.name所以就靠外面传参给他
self.age = age # self.name所以就靠外面传参给他
self.gender = gender # self.name所以就靠外面传参给他
# 这里因为我们知道self是对象自己
S2 = Src2('madison', 20, '男')
# 打印看看是不是通过类把参数封装到对象内部去了
print(S2.name)
print(S2.age)
print(S2.gender)
# 这个时候我们就把name/age/gender这三个属性封装到对象S2中去了
# 所以这种方式的专业叫法是--> 类的初始化
# 总结2:我们通过 __init__初始化的方式,将参数封装到对象S中,那么类下面的
# 其他方法如果需要用到该参数,我们就可以从对象S中取出。所以方便方法取参,如下:
class Src2:
# __init__(self,x,y,z)可以传参哦,因为他本来就是函数。
def init(self, name, age, gender):
self.name = name # self.name所以就靠外面传参给他
self.age = age # self.name所以就靠外面传参给他
self.gender = gender # self.name所以就靠外面传参给他
def func1(self):
# 参数通过对象S2传给方法内部
print(f"我叫{self.name},今年{self.age}岁,性别{self.gender}")
S2 = Src2('madison', 20, '男')
S2.func1()
# 最后配上一张图