使用类对象作为python

时间:2016-03-15 20:55:45

标签: java python oop design-patterns

我的程序有以下结构 -

File1.py

class A:
   index1
   def method1():
       // --do stuff--

File2.py

import File1

Class B:
   index2
   def method2(a) // Needs Object of A as a parameter
        // --do stuff--
        a.method1() // How can I guarantee that this is an object of class A

File3.py

import File1
import File2
Class Starter:
   def start():
       a = A()
       b = B()
       b.method2(a)

我几乎没有问题 -

  1. 如何确保method2中的参数a是A类的对象?
  2. 它可能是特定于IDE的,但是我可以找到我可以在对象' a'中找到方法2中可以访问的所有方法和变量。在编写代码的时候?
  3. 用Java而不是python编写这样的面向对象程序是否更好?

3 个答案:

答案 0 :(得分:1)

(1)如果method2 的参数确实必须是A类的实例,那么您可以使用isinstance内置来验证其类型。然而,pythonic方式只是假设任何对象都会令人满意,只要它暴露出B类想要调用的方法即可。这就是@johnny所说的'鸭子打字'。

(2)这通常是IDE的事情,但在交互式解释器中,您可以在对象上调用dir()vars()来检查其属性。

(3)这是一个品味问题。 Java让您确信对象的行为与预期完全一样,代价是声明类型,接口,检查异常等.Python不太相信行为将完全符合预期,但您不必花费太多时间构建类型等级提前。

答案 1 :(得分:1)

你可以检查这样的类型:

    import File1

    Class B:
       index2
       def method2(a) // Needs Object of A as a parameter
             // --do stuff--
             // How can I guarantee that this is an object of 
             if type(a) == A:
                 a.method1() 

答案 2 :(得分:0)

要在使用该参数执行任何任务之前保证参数属于给定类,您可以使用内置的'type()'函数在执行所需任务之前先验证它。