Python面向对象中,多层继承如何处理私有成员访问?

2026-05-25 13:251阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1311个文字,预计阅读时间需要6分钟。

Python面向对象中,多层继承如何处理私有成员访问?

目录 + 1. Python支持多层继承(1)多层继承实现(2)多层继承和多重继承区别 + 2. 继承中的私有成员 + (1)继承中父类私有属性和方法 + (2)获取和修改私有属性值 + 1. Python支持多层继承

目录
  • 1、Python支持多层继承
    • (1)多层继承实现
    • (2)多层继承和多重继承区别
  • 2、继承中的私有成员
    • (1)继承中父类私有属性和私有方法
    • (2)获取和修改私有属性值

1、Python支持多层继承

故事继续:N年后,徒弟老了,想要把所有技术传承给自己的徒弟。

(1)多层继承实现

# 1.创建师父类,属性和方法 class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') # 2.独创配方 class Prentice(Master): def __init__(self): self.kongfu = '[独创煎饼果子配方]' def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 古法煎饼 def make_master_cake(self): super().__init__() super().make_cake() # 3.徒孙类继承徒弟 class Tusun(Prentice): pass # 步骤: # 创建Tusun对象, xiaotusun = Tusun() # 徒孙使用各种做法 xiaotusun.make_cake() xiaotusun.make_master_cake() (2)多层继承和多重继承区别

图片参考:www.cnblogs.com/Through-Target/p/12118310.html

2、继承中的私有成员

私有成员包括私有成员变量和私有成员方法。

(1)继承中父类私有属性和私有方法

子类可以继承父类中所有的成员,包括私有成员,特殊成员。但是父类中的私有实例属性和私有实例方法,在子类没有执行权限的。

故事继续:徒弟把技术传承给徒孙的同时,不想把自己的钱(8000000个亿)继承给徒孙,这个时候就要为这个实例属性设置私有权限。

# 1.独创配方 class Prentice(): def __init__(self): self.kongfu = '[独创煎饼果子配方]' # 定义私有属性,资产 self.__money = 8000000 # 摊煎饼 def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 定义私有方法 def __tellMe(self): print(self.kongfu) print(self.__money) def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 徒孙类 class Tusun(Prentice): pass xiaoqiu = Tusun() # 子类对象调用父类的共有方法,可以 xiaoqiu.make_cake() # 子类对象调用父类的公有属性,可以 print(f"煎饼做法流派{xiaoqiu.kongfu}") # 子类对象调用父类的私有属性 # 不可以报错: # AttributeError: 'Tusun' object has no attribute '__money' # print(f"煎饼做法流派{xiaoqiu.__money}") # 子类对象调用父类的私有方法 # 不可以,报错 # AttributeError: 'Tusun' object has no attribute '__tellMe' # xiaoqiu.__tellMe() """ # 下面的方式子类可以直接访问父类的私有成员 注意: 子列对象不能直接访问父类的私有成员的原理 和类中的私有属性私有方法的原理是一样的。 不明白的可以去看前边的文章,私有成员变量。 """ print(f"煎饼做法流派{xiaoqiu._Prentice__money}") xiaoqiu._Prentice__tellMe()

注意:子类可以继承父类中所有的成员,但是没有权限使用父类的私有属性和私有方法。

(2)获取和修改私有属性值

在Python中,一般定义函数名get_xx用来获取私有属性,定义set_xx用来修改私有属性值。

# 1.独创配方 class Prentice(): def __init__(self): self.kongfu = '[独创煎饼果子配方]' # 定义私有属性,资产 self.__money = 8000000 # 摊煎饼 def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 定义私有方法 def __tellMe(self): print(self.kongfu) print(self.__money) def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 获取私有属性 def get_money(self): return self.__money # 修改私有属性 def set_money(self, money): self.__money = money # 徒孙类 class Tusun(Prentice): pass # 创建Tusun对象 xiaoTusun = Tusun() # 获取子类对象继承父类的私有money print(xiaoTusun.get_money()) # 8000000 # 设置子类对象中,父类的私有属性 xiaoTusun.set_money(18888) # 在次查看 print(xiaoTusun.get_money()) # 18888 # 在创建一个新的Tusun对象 xiaoTusun2 = Tusun() # 获取子类对象继承父类的私有money # 可以看到结果是# 8000000 # 说明上边修改的私有属性是对象中的父类继承的私有属性 # 和父类中的私有属性无关 print(xiaoTusun2.get_money()) # 8000000

总结:

子类可以继承父类中所有的成员,但是没有权限使用父类的私有属性和私有方法。

Python面向对象中,多层继承如何处理私有成员访问?

但是父类中定义了访问父类中私有变量的getter()setter()方法,子类也是可以继承到的。

子类对象中可以通过继承到的getter()setter()方法,去修改和获取子类对象中所继承私有成员变量。

本文共计1311个文字,预计阅读时间需要6分钟。

Python面向对象中,多层继承如何处理私有成员访问?

目录 + 1. Python支持多层继承(1)多层继承实现(2)多层继承和多重继承区别 + 2. 继承中的私有成员 + (1)继承中父类私有属性和方法 + (2)获取和修改私有属性值 + 1. Python支持多层继承

目录
  • 1、Python支持多层继承
    • (1)多层继承实现
    • (2)多层继承和多重继承区别
  • 2、继承中的私有成员
    • (1)继承中父类私有属性和私有方法
    • (2)获取和修改私有属性值

1、Python支持多层继承

故事继续:N年后,徒弟老了,想要把所有技术传承给自己的徒弟。

(1)多层继承实现

# 1.创建师父类,属性和方法 class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') # 2.独创配方 class Prentice(Master): def __init__(self): self.kongfu = '[独创煎饼果子配方]' def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 古法煎饼 def make_master_cake(self): super().__init__() super().make_cake() # 3.徒孙类继承徒弟 class Tusun(Prentice): pass # 步骤: # 创建Tusun对象, xiaotusun = Tusun() # 徒孙使用各种做法 xiaotusun.make_cake() xiaotusun.make_master_cake() (2)多层继承和多重继承区别

图片参考:www.cnblogs.com/Through-Target/p/12118310.html

2、继承中的私有成员

私有成员包括私有成员变量和私有成员方法。

(1)继承中父类私有属性和私有方法

子类可以继承父类中所有的成员,包括私有成员,特殊成员。但是父类中的私有实例属性和私有实例方法,在子类没有执行权限的。

故事继续:徒弟把技术传承给徒孙的同时,不想把自己的钱(8000000个亿)继承给徒孙,这个时候就要为这个实例属性设置私有权限。

# 1.独创配方 class Prentice(): def __init__(self): self.kongfu = '[独创煎饼果子配方]' # 定义私有属性,资产 self.__money = 8000000 # 摊煎饼 def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 定义私有方法 def __tellMe(self): print(self.kongfu) print(self.__money) def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 徒孙类 class Tusun(Prentice): pass xiaoqiu = Tusun() # 子类对象调用父类的共有方法,可以 xiaoqiu.make_cake() # 子类对象调用父类的公有属性,可以 print(f"煎饼做法流派{xiaoqiu.kongfu}") # 子类对象调用父类的私有属性 # 不可以报错: # AttributeError: 'Tusun' object has no attribute '__money' # print(f"煎饼做法流派{xiaoqiu.__money}") # 子类对象调用父类的私有方法 # 不可以,报错 # AttributeError: 'Tusun' object has no attribute '__tellMe' # xiaoqiu.__tellMe() """ # 下面的方式子类可以直接访问父类的私有成员 注意: 子列对象不能直接访问父类的私有成员的原理 和类中的私有属性私有方法的原理是一样的。 不明白的可以去看前边的文章,私有成员变量。 """ print(f"煎饼做法流派{xiaoqiu._Prentice__money}") xiaoqiu._Prentice__tellMe()

注意:子类可以继承父类中所有的成员,但是没有权限使用父类的私有属性和私有方法。

(2)获取和修改私有属性值

在Python中,一般定义函数名get_xx用来获取私有属性,定义set_xx用来修改私有属性值。

# 1.独创配方 class Prentice(): def __init__(self): self.kongfu = '[独创煎饼果子配方]' # 定义私有属性,资产 self.__money = 8000000 # 摊煎饼 def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 定义私有方法 def __tellMe(self): print(self.kongfu) print(self.__money) def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') # 获取私有属性 def get_money(self): return self.__money # 修改私有属性 def set_money(self, money): self.__money = money # 徒孙类 class Tusun(Prentice): pass # 创建Tusun对象 xiaoTusun = Tusun() # 获取子类对象继承父类的私有money print(xiaoTusun.get_money()) # 8000000 # 设置子类对象中,父类的私有属性 xiaoTusun.set_money(18888) # 在次查看 print(xiaoTusun.get_money()) # 18888 # 在创建一个新的Tusun对象 xiaoTusun2 = Tusun() # 获取子类对象继承父类的私有money # 可以看到结果是# 8000000 # 说明上边修改的私有属性是对象中的父类继承的私有属性 # 和父类中的私有属性无关 print(xiaoTusun2.get_money()) # 8000000

总结:

子类可以继承父类中所有的成员,但是没有权限使用父类的私有属性和私有方法。

Python面向对象中,多层继承如何处理私有成员访问?

但是父类中定义了访问父类中私有变量的getter()setter()方法,子类也是可以继承到的。

子类对象中可以通过继承到的getter()setter()方法,去修改和获取子类对象中所继承私有成员变量。