在python中如何从私有类继承父类属性?

在python中如何从私有类继承父类属性?,python,class,inheritance,parent-child,Python,Class,Inheritance,Parent Child,我一直在寻找这个问题的答案,但还没有找到答案。我需要让子类访问父类中属性的值 下面是一个例子: class myclass: def __init__(self): class __firstinternal__: def __init__(self): self.second = __secondinternal__() class __secondinternal__:

我一直在寻找这个问题的答案,但还没有找到答案。我需要让子类访问父类中属性的值

下面是一个例子:

class myclass:
    def __init__(self):

        class __firstinternal__:
            def __init__(self):
                self.second = __secondinternal__()

        class __secondinternal__:
            def __init__(self):
                self.var = myclass.getString()

    def getString(self):
        return "something"

    self.internal = __firstinternal__()
    print self.internal.second.var

c = myclass()
Traceback (most recent call last):
  File "./inheritest.py", line 19, in <module>
    c = myclass()
  File "./inheritest.py", line 15, in __init__
    self.internal = __firstinternal__()
  File "./inheritest.py", line 7, in __init__
    self.second = __secondinternal__()
  File "./inheritest.py", line 11, in __init__
    self.anothervar = myclass.getString()
AttributeError: class myclass has no attribute 'getString'
class-myclass:
定义初始化(自):
类\uuuu第一内部\uuuuu:
定义初始化(自):
self.second=\uuuuuu secondinternal\uuuuuu()
第二类内部类:
定义初始化(自):
self.var=myclass.getString()
def getString(self):
返回“某物”
self.internal=\uuuuu firstinternal\uuuuuu()
打印self.internal.second.var
c=myclass()
回溯(最近一次呼叫最后一次):
文件“/inheritest.py”,第19行,在
c=myclass()
文件“/inheritest.py”,第15行,在__
self.internal=\uuuuu firstinternal\uuuuuu()
文件“/inheritest.py”,第7行,在__
self.second=\uuuuuu secondinternal\uuuuuu()
文件“/inheritest.py”,第11行,在__
self.anothervar=myclass.getString()
AttributeError:类myclass没有属性“getString”
换句话说,我需要secondinternal从父myclass继承方法getString()

我已经找到了如何在班级不是孩子的时候做到这一点,但我想让这两个班级保持隐私

有什么想法吗


提前谢谢

不清楚“子类”和“父类”是什么意思。在另一个类中定义类不是常见的Python模式。你需要更多地解释你是如何使用这些术语的。此外,您发布的代码没有给出您描述的错误,因此您发布的代码似乎与正在运行的代码不同

基于你的代码,我能给出的最好答案是,“你不能做你想做的事情。”如果你在
myclass
\uuuuu firstinternal\uuuuuu
方法中定义
\uuu init\uuuuuuuu
,它就没有对
myclass
的引用,因此它无法访问它或它的任何方法
myclass
在定义其所有方法之前不存在,因此方法中的任何内容都无法在类定义时访问类定义的其他部分。您可以在运行时通过
myclass.getString()
访问它,您说它不起作用,但正如前面提到的,这是没有意义的,因为您给出的错误与代码实际的作用不同

也许您应该使用继承,而不是在彼此内部定义类,但这只是一个猜测


您应该阅读以了解如何在Python中使用类。

您的代码很混乱。正如我所能说的,这里有两种不同的方法来做你想要的事情

class myclass:
    def __init__(self):
        pass

    def getString(self):
        return "something"

class child(myclass):
    def __init__(self):
        self.var = self.getString()

    def someMethod(self):
        return "hello"
……及其产出:

>>> c = child()
>>> print c.var
something
在这里,我定义了一个父类
myclass
,并使
child
继承
myclass
。然后,它可以像普通一样调用
getString
,因为它继承了它

如果需要保持类的私有性(这在python中不是常见的习惯用法),有一种方法:

class myclass2:
    def __init__(self):
        class temp(myclass2): # inherits myclass
            def __init__(self):
                self.var = self.getString()

        self.__privateClass = temp 

    def getString(self):
        return "something else"

    def test(self):
        temp = self.__privateClass()
        print temp.var
以及输出:

>>> m = myclass2()
>>> m.test()
…尽管这种方法有点傻


还请注意,双下划线用于将某个对象标记为私有对象,而不是子类。(还要注意,“私有变量”的概念在python中与在其他语言中不同。)

您的代码没有意义。在
\uuuu init\uuuu
方法中定义这些类不会起任何作用;当方法完成执行时,它们就会消失。你有可能把代码中的缩进搞砸了吗?您正在尝试将类设置为外部类的属性吗?还有,为什么要使用双下划线?XY。描述您试图解决的问题,而不是想象中的愚蠢解决方案。只要子类使用它们自己的方法,代码就可以完美地工作。我的问题只是当我需要使用来自父类的方法时。关于双下划线,我认为这就是子类的定义方式……如果您运行该代码,您将不会得到您描述的错误。您将得到一个
名称错误
,表示
\uuu firstinternal\uuu
未定义。还有,你说的“儿童班”是什么意思?在其他类中定义类不是Python中的常见模式。我试图解决的问题是让子类使用其父类的方法。如果这里有任何编码不正确的地方,我将非常感谢您的反馈。谢谢大家的及时回复。