如果来自不同类的对象相互交互,这样可以吗?

时间:2009-09-30 13:11:05

标签: python oop

我刚开始在Python中使用面向对象编程。如果我创建一个使用来自另一个类的对象的类的方法,那么我会徘徊。换句话说,当我调用第一个类的方法时,我将第二个类中的对象作为参数之一。然后,所考虑的方法(第一类)可以通过第二类中的对象进行操作(获取其属性或使用其方法)。是否允许在Python中使用?它不被认为是一种糟糕的编程风格吗?

如果我使用第一个类的方法从第二个类实例化对象,那是否可以。换句话说,如果我从第一个类调用一个方法,它将实例化第二个类的对象。

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:7)

如果你正在谈论将一个对象的实例传递给另一个对象的方法,那么当然是允许的!这被认为是很好的做法。

如果您想了解更多关于良好的面向对象编码的信息,我可以提供一些建议的读数:

设计模式:可重复使用的面向对象软件的元素作者:Erich Gamma,Richard Helm,Ralph Johnson,John M. Vlissides

被称为Gang Of Four的书,它列出了许多设计模式,这些模式似乎一次又一次地出现在面向对象的代码中。这是一个讨论如何以良好的面向对象方式处理某些问题的想法的好地方。

另一个好的:

重构:改进现有代码的设计由Martin Fowler,Kent Beck,John Brant,William Opdyke,Don Roberts

这是一本很好的书,用于学习编写面向对象代码时不应该做的事情,以及如何修复它以使其在遇到代码时更好。它提供了一系列代码气味列表,这些代码气味表明了面向对象的错误代码,以及重构的参考部分,它提供了如何修复这些气味并使它们更加面向对象的说明。

答案 1 :(得分:1)

你所说的很好。实际上,Python中的大多数数据类型(字符串,整数,布尔值等)都是对象,因此几乎所有方法都按照您描述的方式工作。

答案 2 :(得分:1)

答案是,它不仅仅是好的,它实际上是重点。

什么不是“OK”是指对象开始摆弄彼此的内部。你可以通过调用那些内部带有前导下划线的东西来阻止这种情况发生(或者它也是内部的子类)。这对于你不应该使用它的其他程序员来说是一个小标记,并且它不是官方API,可以改变。

答案 3 :(得分:0)

我认为没有问题,它总是发生。你有一个特定的问题,你试图解决或只是问一个没有上下文的一般问题?

答案 4 :(得分:0)

Demeter法则是您可以善意与之互动的方法和对象的一般指导。

是指导。你可以创建不遵循LoD的代码,但它是一个很好的指南,可以帮助你构建“结构害羞的系统” - 当你试图做出重大改变时,你将会欣赏这些内容。

http://en.wikipedia.org/wiki/Law_of_Demeter

我建议您在不编码时阅读良好的OO实践和原则。每天晚上或每隔一天,也许会有一些论文或一本书的一章。尝试SOLID原则。你可以在这里找到他们的快速参考:

http://agileinaflash.blogspot.com/2009/03/solid.html