1. 官方语言
继承:子类继承父类的属性和方法
2. 生活举例
生活中的继承,有很多种,比如:子女继承父辈的财产,徒弟继承师父的传统手艺…
3. 语法格式
# 父类 A class A(): pass # 子类 B class B(A): pass
在 Python 中,所有类默认继承 object 类, 它是顶级类或基类,其他子类叫做派生类。
class A(): def __init__(self): self.name = 'hello' def f1(self): print('父类的 f1 方法') class B(A): pass # 创建对象 b1 = B() # 访问实例属性 print(b1.name) # hello # 调用实例方法 b1.f1() # 父类的 f1 方法
字面意思,一层一层的继承,实践一下就懂了
class A(): def f1(self): print('f1') class B(A): def f2(self): print('f2') class C(B): pass # 创建对象 c1 = C() c1.f1() # f1 c1.f2() # f2
解释说明:意思是一个类同时继承了多个父类。
""" 多继承: 是 python 独有的一种机制 因为 python 中没有接口概念,所以使用多继承实现接口 如果多个父类中存在同名方法,子类按顺序优先调用第一个父类的方法 """ class A(): def f2(self): print('A 的 f2 方法') class B(): def f2(self): print('B 的 f2 方法') class C(A,B): def f1(self): print('C 的 f1 方法') # 创建对象 c1 = C() c1.f1() # C 的 f1 方法 c1.f2() # A 的 f2 方法
class A(): def f1(self): print('父类的 f1 方法') class B(A): def f2(self): # 调用父类中的 f1 方法 A.f1(self) # 创建对象 b1 = B() b1.f2() # 父类的 f1 方法
class A(): def f1(self): print('父类的 f1 方法') class B(A): def f2(self): # 调用父类中的 f1 方法 super().f1() # 创建对象 b1 = B() b1.f2() # 父类的 f1 方法
3. 如果子类定义了与父类同名的属性和方法,子类默认获取自己的属性和方法。
class A(): def __init__(self): self.name = '父类A' def f1(self): print('父类的 f1 方法') class B(A): def __init__(self): self.name = '子类B' def f1(self): print('子类的 f1 方法') # 创建对象 b1 = B() # 访问实例属性 print(b1.name) # 子类B # 调用实例方法 b1.f1() # 子类的 f1 方法
4. 如果子类定义了与父类同名的属性和方法,子类还是想获取父类的属性和方法,该怎么办呢?
请细品 class A(): def __init__(self): self.name = '父类A' def f1(self): print(self.name) class B(A): def __init__(self): self.name = '子类B' def f1(self): print(self.name) def f2(self): A.__init__(self) A.f1(self) b1 = B() b1.f2() # 父类A print(b1.name) # 父类A
如果这个属性和方法不需要外部访问,那就设置成私有的。
设置私有权限的方法:在属性名和方法名 前面 加上两个下划线 __。
1. 语法格式
class 类名(): # 私有属性 __属性名 = 值 # 私有方法 def __函数名(self): 代码
2. 举例
# 私有属性和私有方法只能在类里面访问和修改。 class A(): def __init__(self): self.__name = '张三' # 将 name 属性设置为私有,在类的外部无法访问 def __f1(self): print('f1') a1 = A() print(a1.name) # 报错 a1.__f1() # 报错
在Python中,一般定义函数名 get_xx 用来获取私有属性,定义 set_xx 用来修改私有属性值。
class A(): def __init__(self): self.__name = '张三' # 将 name 属性设置为私有,在类的外部无法访问 def f2(self): print(self.__name) def get_name(self): return self.__name def set_name(self,value): self.__name = value a1 = A() # 通过公有方法和属性来操作类中的私有成员 # 获取 a1.f2() # 张三 # 修改 a1.set_name('老王') print(a1.get_name()) # 老王
一起进步吧