Python面向对象基础(二)

2021/9/23 17:12:20

本文主要是介绍Python面向对象基础(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录(PS:觉得不错请点赞收藏支持一下)

    • 一、继承
        • 1.1 概念
        • 1.2 单继承
        • 1.3 多层继承
        • 1.4 多继承
    • 二、子类与父类的方法
        • 2.1 子类调用父类指定方法
    • 三、私有成员
        • 3.1 定义
        • 3.2 获取和修改私有属性
    • 总结

一、继承

1.1 概念

1. 官方语言
继承:子类继承父类的属性和方法
2. 生活举例
生活中的继承,有很多种,比如:子女继承父辈的财产,徒弟继承师父的传统手艺…
3. 语法格式

# 父类 A
class A():
    pass
    
# 子类 B
class B(A):
    pass

在 Python 中,所有类默认继承 object 类, 它是顶级类或基类,其他子类叫做派生类。

1.2 单继承

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 方法

1.3 多层继承

字面意思,一层一层的继承,实践一下就懂了

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

1.4 多继承

解释说明:意思是一个类同时继承了多个父类。

"""
多继承: 是 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 方法

二、子类与父类的方法

2.1 子类调用父类指定方法

  1. 通过 父类名称.方法名称(self) 调用
class A():
    def f1(self):
        print('父类的 f1 方法')
class B(A):
    def f2(self):
        # 调用父类中的 f1 方法
        A.f1(self)
# 创建对象
b1 = B()
b1.f2()  # 父类的 f1 方法
  1. 通过 supper().方法名称() 调用
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

三、私有成员

如果这个属性和方法不需要外部访问,那就设置成私有的。

3.1 定义

设置私有权限的方法:在属性名和方法名 前面 加上两个下划线 __
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()  # 报错

3.2 获取和修改私有属性

在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())  # 老王

总结

一起进步吧



这篇关于Python面向对象基础(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程