当前位置:首页>python>Python 面向对象进阶--@property 属性装饰器 / @setter / @deleter / 单继承、多继承、重写、super()

Python 面向对象进阶--@property 属性装饰器 / @setter / @deleter / 单继承、多继承、重写、super()

  • 2026-10-11 08:11:40
Python 面向对象进阶--@property 属性装饰器 / @setter / @deleter / 单继承、多继承、重写、super()

一、@property 属性装饰器

1. 作用

把方法伪装成属性调用:

  • • 不用加 ()
  • • 既能封装私有属性
  • • 又能像普通属性一样取值、赋值、删除

2. 基础 @property 只读

把方法变成只读属性,只能取值,不能赋值。

classPerson:
def__init__(self, age):
self.__age = age  # 私有属性

    @property
defage(self):
# 读取私有属性
returnself.__age

p = Person(18)
print(p.age)   # 像属性一样调用,不用 ()
# p.age = 20   # 报错,只读不能赋值

二、@age.setter 赋值装饰器

给 property 增加赋值权限,可以做数据校验。
语法:@属性名.setter

classPerson:
def__init__(self, age):
self.__age = age

    @property
defage(self):
returnself.__age

    @age.setter
defage(self, value):
# 赋值时做校验
if0 < value < 150:
self.__age = value
else:
print("年龄不合法")

p = Person(18)
print(p.age)
p.age = 25# 触发 setter
print(p.age)
p.age = 200# 校验不通过

三、@age.deleter 删除装饰器

控制删除属性时的行为。

classPerson:
def__init__(self, age):
self.__age = age

    @property
defage(self):
returnself.__age

    @age.deleter
defage(self):
print("删除年龄属性")
delself.__age

p = Person(18)
del p.age   # 触发 deleter

四、property 三者完整结构

classPerson:
def__init__(self, age):
self.__age = age

# 读
    @property
defage(self):
returnself.__age

# 写
    @age.setter
defage(self, val):
self.__age = val

# 删
    @age.deleter
defage(self):
delself.__age

记忆:
@property 读、@setter 写、@deleter 删


五、面向对象 继承

1. 继承概念

  • • 子类 继承 父类
  • • 子类自动拥有父类的属性和方法
  • • 代码复用、便于扩展

2. 单继承语法

class父类:
pass

class子类(父类):
pass

单继承示例

# 父类
classAnimal:
defeat(self):
print("动物会吃东西")

# 子类
classDog(Animal):
defbark(self):
print("狗会汪汪叫")

d = Dog()
d.eat()   # 继承父类方法
d.bark()  # 自己独有方法

六、方法重写(覆盖)

子类和父类同名方法,子类会覆盖父类。

classAnimal:
defeat(self):
print("动物吃东西")

classCat(Animal):
# 重写父类方法
defeat(self):
print("猫吃鱼")

c = Cat()
c.eat()  # 执行子类重写的方法

七、super() 调用父类方法

子类重写后,还想保留父类原有逻辑,用 super()

classAnimal:
defeat(self):
print("动物吃东西")

classDog(Animal):
defeat(self):
super().eat()   # 调用父类 eat
print("狗吃狗粮")

d = Dog()
d.eat()

八、多继承

1. 语法

一个子类同时继承多个父类

class父类1:
pass

class父类2:
pass

class子类(父类1, 父类2):
pass

2. 多继承示例

classA:
deffunA(self):
print("A 方法")

classB:
deffunB(self):
print("B 方法")

classC(A, B):
pass

c = C()
c.funA()
c.funB()

3. 多继承注意:MRO 继承顺序

当多个父类有同名方法,按继承顺序从左到右查找。


九、核心总结速记

属性装饰器

  1. 1. @property:把方法变只读属性
  2. 2. @xxx.setter:赋值、可加校验
  3. 3. @xxx.deleter:删除属性控制

继承

  1. 1. 单继承:子类(父类)
  2. 2. 重写:子类同名方法覆盖父类
  3. 3. super():调用父类构造/方法
  4. 4. 多继承:子类(父1,父2),多类功能合并

最新文章

随机文章