持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
1. 给对象增加属性
在Python中,要给对象设置属性,非常的容易,但是不推荐使用。因为,对象属性的封装应该封装在类的内部。
只需要在类的外部的代码中直接通过对象变量名.属性名设置一个属性即可。
注意:这种方式虽然简单,但是不推荐使用,并没有把对象属性封装在类的内部,只是简单粗暴的给对象添加属性名。
给对象临时增加属性的代码演示如下所示:
class Cat:
# 定义吃鱼的方法
def eat(self):
print("小猫爱吃鱼")
# 定义喝水的方法
def drink(self):
print("小猫要喝水")
# 创建猫对象
tom = Cat()
# 给变量临时增加属性:可以使用 .属性名,利用赋值语句就可以了
tom.name = "Tom"
# 对象调用方法
tom.drink()
tom.eat()
温馨提示:
- 在日常开发中,不推荐在类的外部给对象增加属性
- 如果在运行时,没有找到属性,程序会报错
- 对象包含哪些属性,应该封装在类的内部
2. self的理解
由哪一个对象调用的方法,方法内的self就是哪一个对象的引用
- 在类封装的方法内部,
self就表示当前调用方法的对象自己 - 调用方法时,程序员不需要传递self参数
在方法内部:
- 可以通过self.访问对象的属性
- 也可以通过self.调用其他对象方法
代码演示如下所示:代码中使用了self.name访问了name属性。从中可以看出,由哪一个对象调用的方法,方法内的self就是哪一个对象的引用。
class Cat:
# 定义吃鱼的方法
def eat(self):
# 哪一个对象调用的方法,self就是哪一个对象的引用
print("%s 爱吃鱼" % self.name)
# 定义喝水的方法
def drink(self):
print("%s 要喝水" % self.name)
# 创建猫对象
tom = Cat()
# 给变量临时增加属性:可以使用 .属性名,利用赋值语句就可以了
tom.name = "Tom"
# 对象调用方法
tom.drink()
tom.eat()
# 在创建一个猫对象
lazy_cat = Cat()
lazy_cat.name = "大懒猫"
lazy_cat.drink()
lazy_cat.eat()
# 输出变量
print("tom", tom)
print("lazy-cat", lazy_cat)
# 使用id函数查询数据在内存中的地址
addr = id(tom)
print("以十进制输出:%d" % addr)
print("以十六进制输出:%x" % addr)
程序运行结果如下图所示:tom和lazy_cat对象都调用了eat和drink方法,方法内部的self.name就是由tom和lazy_cat引用。
3. 初始化方法
当使用类名()创建对象时,会自动执行以下操作:
- 为对象在内存中分配空间--创建对象
- 为对象的属性设置初始值--初始化方法(init)
上面所说的初始化方法,就是
__init__方法,__init__是对象的内置方法
__init__方法是专门用来定义一个类具有哪些属性的方法,使用类名()创建对象的时候,会自动调用初始化方法__init__
程序演示代码如下所示:
class Cat:
def __init__(self):
print("这是一个初始化方法")
# 使用类名()创建对象的时候,会自动调用初始化方法__init__
tom = Cat()
程序运行结果如下图所示: