Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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
Java 使用类对象作为python中其他类函数的参数_Java_Python_Oop_Design Patterns - Fatal编程技术网

Java 使用类对象作为python中其他类函数的参数

Java 使用类对象作为python中其他类函数的参数,java,python,oop,design-patterns,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 t

我的程序有以下结构-

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)
我有几个问题-

  • 如何确保method2中的参数a是类a的对象
  • 它可能是特定于IDE的,但在编写代码时,我是否可以找出method2中可以访问对象“a”的所有方法和变量
  • 用Java而不是python编写这样的面向对象程序更好吗
  • (1) 如果method2的参数确实必须是类A的实例,那么可以使用
    isinstance
    内置项来验证其类型。然而,pythonic的方法只是简单地假设只要它公开类B想要调用的方法,任何对象都是令人满意的。这就是@johnny所说的“鸭子打字”的意思

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

    (3) 这是品味的问题。Java让您确信对象的行为将完全符合预期,而代价是声明类型、接口、检查的异常等。Python对行为是否完全符合预期的信心较低,但您无需花费太多时间提前构建类型层次结构。

    (1)如果method2的参数确实必须是类A的实例,那么可以使用
    isinstance
    内置项来验证其类型。然而,pythonic的方法只是简单地假设只要它公开类B想要调用的方法,任何对象都是令人满意的。这就是@johnny所说的“鸭子打字”的意思

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


    (3) 这是品味的问题。Java可以让您确信对象的行为完全符合预期,而不必声明类型、接口、已检查的异常等。Python对行为是否符合预期的信心较低,但您无需花费太多时间提前构建类型层次结构。

    您可以这样检查类型:

        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() 
    

    您可以这样检查类型:

        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() 
    

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

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

    这不是Duck类型的本质吗?这不是Duck类型的本质吗?