Python 面向对象:实例方法、魔法方法与属性分类
一. 实例方法:
实例方法是属于对象的功能 / 行为,是类中最常用的方法,用于描述对象能做什么。
1.什么是实例方法
定义在类内部,用于描述对象的行为;必须通过对象调用,不能直接用类名调用;第一个参数固定为 self,代表当前调用方法的实例对象本身。
在类中定义实例方法时,定义语法与函数定义的方法是一致的 。
2.基本语法
# 定义类
class 类名:
def __init__(self, 形参列表):
self.属性名 = 参数值
self.属性名 = 参数值
def 方法名(self, 形参列表):
# 方法功能代码
# 可通过self访问对象的属性
...
# 创建对象
对象名 = 类名(参数列表)
# 调用实例方法
对象名.方法名(实参)
代码示例:
# 定义学生类
class Student:
# 初始化属性:姓名、年龄
def __init__(self, name, age):
self.name = name
self.age = age
# 实例方法1:介绍自己
def introduce(self):
print(f"大家好,我叫{self.name},今年{self.age}岁")
# 实例方法2:学习
def study(self, subject):
print(f"{self.name}正在学习{subject}")
# 创建对象
stu = Student("小明", 18)
# 调用实例方法
stu.introduce() # 大家好,我叫小明,今年18岁
stu.study("Python")# 小明正在学习Python
程序运行结果

注意:self 是固定参数,定义时必须写,调用时不用传值;
实例方法内部可以通过 self.属性名 直接访问对象属性;
实例方法隶属于对象,只能由对象调用。
二.魔法方法
1.什么是魔术方法
魔术方法是指在Python中以双下划线开头和结尾的特殊方法,用于定义类的特殊行为;
魔术方法不需要手动调用,Python会在特定的时机自动调用。
2.常见的魔术方法
(1)__init__方法:初始化方法
在创建对象时自动调用,为实例对象设置对应的属性。
def __init__(self, name):
self.name = name
(2)__str__方法:字符串表示的方法
打印对象、转换对象为字符串时自动调用;使用return返回一个字符串(必须);自定义打印对象时的输出内容。
class Student:
def __init__(self, name):
self.name = name
# 定义__str__,自定义输出内容
def __str__(self):
return f"学生对象:姓名={self.name}"
stu = Student("小红")
print(stu) # 自动执行__str__,输出:学生对象:姓名=小红
(3)__del__方法:删除对象的方法
对象被销毁 / 程序结束时自动调用,一般用于释放资源。
(4)__eq__方法:比较两个对象是否相等
使用 == 比较两个对象时自动调用,自定义对象相等的判断逻辑。
三.属性分类
Python 中对象的属性分为两类,作用范围和使用方式完全不同。
1.实例属性
属于单个实例对象;
每个对象独立拥有,互不干扰;
在 __init__ 中通过 self.属性名 定义;
只能通过对象名.属性访问;
各个对象独有的数据(姓名、年龄、型号等)。
代码示例
class Car:
def __init__(self, brand):
self.brand = brand # 实例属性
c1 = Car("宝马")
c2 = Car("奔驰")
print(c1.brand) # 宝马(独立属性)
2.类属性
属于类本身;
所有对象共享同一个值,一处修改,全部生效;
定义在类内部、方法外部;
推荐用类名.属性,也可用对象调用;
所有对象共享的数据。
代码示例
class Car:
# 类属性:所有汽车共享的类型
type = "汽车"
def __init__(self, brand):
self.brand = brand
# 类名访问类属性(推荐)
print(Car.type) # 汽车
# 对象也可访问类属性
c1 = Car("奥迪")
print(c1.type) # 汽车
3.属性查找规则
通过实例对象查找属性时,会先查找实例属性;
当实例属性不存在时,才会查找类属性;
两种属性都找不到,则会报错。
四.总结
1. 实例方法依赖对象调用,自带self参数,用于实现对象的具体行为;
2. 魔术方法是双下划线开头和结尾的特殊方法,Python会自动调用,用于定义类的特殊行为;
3. 实例属性归对象独有,类属性归所有对象共享,查找时优先实例属性。
更多推荐


所有评论(0)