Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的私有类变量?_Python_Class - Fatal编程技术网

Python中的私有类变量?

Python中的私有类变量?,python,class,Python,Class,我希望能够在不继承类变量的情况下扩展类 在这种情况下: A类: 别名=['a','ay'] B(A)类: 通过 打印(B.别名) 我宁愿得到一个错误,B没有定义别名变量,也不希望B意外调用ay 可以想象一种解决方案,其中别名成为实例化对象(self.aliases)的一个成员,并在\uuuu init\uuuu中设置,但我确实希望能够使用cls对象而不是类的实例来访问别名 有什么建议吗?这是一项有点古怪的工作,但你可以这样做: class K: def __init__(self):

我希望能够在不继承类变量的情况下扩展类

在这种情况下:

A类:
别名=['a','ay']
B(A)类:
通过
打印(B.别名)
我宁愿得到一个错误,B没有定义
别名
变量,也不希望
B
意外调用
ay

可以想象一种解决方案,其中别名成为实例化对象(
self.aliases
)的一个成员,并在
\uuuu init\uuuu
中设置,但我确实希望能够使用
cls
对象而不是类的实例来访问别名


有什么建议吗?

这是一项有点古怪的工作,但你可以这样做:

class K:
    def __init__(self):
        self.mems = dir(self)

def defaultMembers():
    k = K()
    return(k.mems)

class A:
    aliases=['a','ay']

class B(A):
    def __init__(self):
        for k in set(dir(self))-set(defaultMembers()):
            print("removing "+k)
            setattr(self, k, None)

a = A()
b = B()
print(b.aliases)
#None
print(a.aliases)
#['a','ay']

我想您真正需要的是
setattr(self,“aliases”,None)
这仍然会导致None而不是non变量。不幸的是,Calss不支持删除,因为我尝试先使用del

Python没有真正的私有属性。但您可以使用双下划线(
\uuuuu
)来定义它:

但您仍可以通过以下方式访问它:

print(B._A__aliases)

看看这个答案:是的。我已经读过了。它没有回答这个问题,Python只是没有其他语言那样的可见性限制。(还有,你所说的“而不是让
B
意外地调用
ay
”是什么意思?)因为“ay”是A的别名,但在上面也会用于B。在
B
中放置
别名=[]
有什么不对?我想重点是修改从类对象(B)访问
别名时的行为不是类实例(b)。idk他希望如何在不实例化类变量的情况下使用它们。我希望有一些简单的解决方法,例如“\u别名”不会在扩展上被复制。我认为这个答案现在应该被删除。谢谢哦这正是我所希望的。这就是解决办法!我没有意识到“\uuuuuuuuuuuuuuuuuuuuuuuu”的混乱对类变量有效。
print(B._A__aliases)