我的任务是使用Python重写用Java编写的应用程序。这是我与Python的第一次接触,我有点困惑。正如我读到的,Python并不是强类型的。在我的程序中,我有很多带有参数的类,这些参数是其他类的实例。这是一个简短的演示:
class ClassA:
nameOfClass = "ClassA"
def __init__(self):
print("I'm ClassA")
def printOtherClassMethod(self, instanceOfOtherClass):
instanceOfOtherClass.printThisMethod()
class ClassB:
nameOfClass = "ClassA"
def __init__(self):
print("I'm ClassB")
def printThisMethod(self):
print("How classA can know that printThisMethod exists?")
classA = ClassA()
classB = ClassB()
classA.printOtherClassMethod(classB)
有没有办法指定printOtherClassMethod
的参数必须是ClassB
的实例?第一个问题是我的IDE(PyCharm)无法检测到instanceOfOtherClass
有printThisMethod
并且很容易出错。另外,我有一个练习,让每个类都在单个文件中。我害怕导入特定文件。例如,如果ClassA
和ClassB
位于单个文件中,我应该在ClassB
的文件中导入ClassA
吗?我的测试显示不是,但我希望将来避免数百万的异常和错误。
答案 0 :(得分:1)
您可以验证对象的类型。
if type(instanceOfOtherClass) not is ClassB:
raise Exception("Object has the wrong type.")
您还可以检查对象是否具有该特定方法。
if not (hasattr(instanceOfOtherClass, 'printThisMethod') and callable(instanceOfOtherClass.printThisMethod)):
raise Exception("Object does not have the correct method.")