在 Python 中,类名称后面的括号 () 用于指定父类(也叫基类),这是实现继承的语法。比如 class 子类(父类): 表示子类继承了父类的功能。
1. 括号里可以有多少个参数?
括号里的参数数量没有固定限制,既可以是空(不继承任何类),也可以有多个父类(称为 “多继承”)。
- 空括号:class A(): 或 class A:(两种写法等价),表示这个类不继承任何父类(默认继承 Python 自带的 object 类)。
- 单个父类:class 小狗(动物): 表示 “小狗” 类继承 “动物” 类的功能。
- 多个父类:class 混血猫(波斯猫, 布偶猫): 表示同时继承多个父类的功能(多继承)。
2. 这些参数的位置是固定的吗?
位置非常重要!当多个父类有同名方法或属性时,Python 会按照括号里的顺序来查找(称为 “方法解析顺序”)。
举例:
class 爸爸:
def 做饭(self):
print("做中餐")
class 妈妈:
def 做饭(self):
print("做西餐")
# 继承顺序:先爸爸,后妈妈
class 孩子(爸爸, 妈妈):
pass
孩子().做饭() # 输出:做中餐(优先用爸爸的方法)
如果把顺序换成 class 孩子(妈妈, 爸爸):,调用 做饭() 会输出 “做西餐”。
3. 有什么要求或讲究?
- 必须是类名:括号里只能放已经定义好的类,不能放普通变量或数值。
- 多继承慎用:虽然支持多继承,但如果父类之间关系复杂,容易出现 “菱形问题”(多个父类最终继承自同一个祖先),导致逻辑混乱。实际开发中尽量避免过度使用多继承。
- 默认继承 object:如果括号为空,Python 会默认让这个类继承 object 类(Python 中所有类的 “祖先”),所以 class A: 和 class A(object): 效果一样(Python 3 中)。
总结:
类括号里的参数是父类列表,数量可多可少(0 到多个),但位置会影响继承时的优先级,且只能放类名。实际使用中,单继承最常用,多继承需谨慎设计。
|