java - 在Python中使用类对象作为其他类函数的参数

标签 java python oop design-patterns

我的程序有以下结构-

文件1.py

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

文件2.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

文件3.py

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

我有几个问题-

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

最佳答案

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

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

(3) 这是一个品味问题。 Java 让您确信对象的行为将完全符合预期,但代价是声明类型、接口(interface)、检查异常等。Python 不太相信行为将完全符合预期,但您不需要花费太多时间来构造类型提前划分层次结构。

关于java - 在Python中使用类对象作为其他类函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36021936/

相关文章:

java - Hibernate:实现POP方法

java - 如何在listview中包含json数据的id

java - 如何管理多个微服务中的安全上下文

python - .value_counts() 给出截断的结果

python - 比较python中两个列表中的元素

java - 如何使用 Selenium WebDriver 查找在每个页面加载时动态 ID/名称发生变化的元素

python - 通过文件读/写与Python代码交互?

ruby-on-rails - 我应该使用类方法还是实例方法,为什么?

java - 重构部分类和循环依赖

java - 子类可以使用相同的方法,但具有不同的变量类型吗?如何? (Java)