gpt4 book ai didi

python-3.x - python 3 从父方法调用子属性

转载 作者:行者123 更新时间:2023-12-02 15:05:42 24 4
gpt4 key购买 nike

无法在父方法中调用子属性,这是测试:

#!/usr/bin/env python3

class A():
def getPath(self):
return self.__path

class B(A):

def __init__( self, name, path):
self.__name = name
self.__path = path

instance = B('test', '/home/test/Projects')

print(instance.getPath())

运行 python 测试文件 $ ./test.py 返回

./test.py 
Traceback (most recent call last):
File "./test.py", line 17, in <module>
print(instance.getPath())
File "./test.py", line 6, in getPath
return self.__path
AttributeError: 'B' object has no attribute '_A__path'

最佳答案

您得到这个是因为您使用的是私有(private)属性。如果您使用非私有(private)属性执行此操作,它将成功。

Python 中的私有(private)属性旨在允许每个类拥有自己的变量私有(private)副本,而该变量不会被子类覆盖。所以在 B 中,__path 表示 _B__path,而在 A 中,__path 表示 __A_path。这正是 Python 旨在工作的方式。 https://docs.python.org/3/tutorial/classes.html#tut-private

既然要让A访问到__path,就不应该使用双下划线。相反,您可以使用单个下划线,这是一种约定,用于指示变量是私有(private)的,而无需实际强制执行。

#!/usr/bin/env python3

class A():
def getPath(self):
return self._path

class B(A):

def __init__( self, name, path):
self.__name = name
self._path = path

instance = B('test', '/home/test/Projects')

print(instance.getPath())

$ ./test.py
/home/test/Projects

关于python-3.x - python 3 从父方法调用子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46962702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com