我编写了以下代码,试图弄清楚如何在主类中实例化子类。我想出了一些感觉不对的东西......至少对我而言。
这种类型的实例存在问题吗?有没有更好的方法来调用子类?
class Family():
def __init__(self):
self.Father = self.Father(self)
self.Mother = self.Mother(self)
class Father():
def __init__(self, instance = ''):
self = instance if instance != '' else self
print self
def method(self):
print "Father Method"
def fatherMethod(self):
print "Father Method"
class Mother():
def __init__(self, instance = ''):
self = instance if instance != '' else self
print self
def method(self):
print "Mother Method"
def motherMethod(self):
print "Mother Method"
if __name__ == "__main__":
Family = Family()
Family.Father.method()
Family.Mother.method()
答案 0 :(得分:6)
您定义的是不(至少在Python术语中)子类 - 它们是内部类或嵌套类。我猜这实际上并不是你想要实现的目标,但我不确定你真正想要的是什么 - 但这是我最好的四个猜测:
A subclass是继承自另一个类的类被称为子类的地方。要使father
成为family
的子类,请使用语法class Father(Family):
。你在这里创建的内容实际上称为内部类,而不是子类。
当您看到Family.Father.method()
之类的内容时,通常意味着“家庭”是module,父亲就是该模块中的一个类。在Python中,module
基本上意味着.py file
。模块没有__init__
方法,但是在导入模块时会执行模块顶层的所有代码(例如if __name__ ...
行)。
同样,您可以将Family设为package - 在Python中,它基本上是指包含__init__.py
文件的文件系统上的目录。 Father
和Mother
将成为包
您可能要实现的目标是声明Family
类型的对象始终具有Father
个对象和Mother
个对象。这不需要嵌套类(实际上,嵌套类是一种完全奇怪的方法)。只需使用:
>>> class Mother(): ... def whoami(self): ... print "I'm a mother" ... >>> class Father(): ... def whoami(self): ... print "I'm a father" ... >>> class Family(): ... def __init__(self): ... self.mother = Mother() ... self.father = Father() ... >>> f = Family() >>> f.father.whoami() I'm a father >>> f.mother.whoami() I'm a mother >>>
答案 1 :(得分:1)
你是对的,这段代码感觉是对的。我的问题是......
你想要达到什么目的?无需在Father
内定义Mother
和Family
,可以在Family
之外定义它们并将其汇总到其中。 (事实是,Father
和Mother
不应该在Family
之外访问吗?Python没有可见性修饰符,例如因为原则是:'我们都成长了-up here',意思是开发人员应该负责并承担负责任的代码处理......)
你真的需要像Class.Class.method
这样的东西吗?除了这个事实,方法查找有点贵,这些链可能表示错误的轴,这意味着你试图从一个设计不太明确的点抓住功能(抱歉是这里模糊不清。)
答案 2 :(得分:1)
Blergh。
为什么父亲和母亲在家庭下面嵌套?没有理由这样做。在外面定义它们,然后在里面实例化它们。
我不确定你想要做什么。您可能需要查看Descriptors,这是一种在clss中定义子对象的方法。