我是C#开发人员的新手,现在要学习python,而且我不太清楚Python函数定义中的类类型参数,尤其是默认null。
在C#中,我可以将另一个类类型设置为参数,并在当前类函数定义中将其默认值设置为null,如果它不为null,则使用其函数。像这样的东西
mouseuse
但是如果我尝试在python中执行此操作,就像我定义一个函数
public class ClassA{
public DoSthByA() {
Console.WriteLine ("I am class A");
}
void DoSthWithB (ClassB b=null) {
if (b != null) {
b.DoSthByB ();
}
}
}
public class ClassB {
public DoSthByB () {
Console.WriteLine ("I am class B");
}
}
系统会警告它是一个没有DoSthByB属性的无类型,我试图搜索它但是没有找到一个好的答案,而且我对python类类型参数不是很清楚,有时感觉就像鸭子打字更多 。只是希望有人可以帮助我,非常感谢〜
答案 0 :(得分:0)
我做了一个变通方法,现在可以工作了,但是不确定在python中这是否是正确的方法
在测试函数中,我首先声明一个classB类型var class_b_ref,然后取决于函数参数为None还是不将实际引用obj引用传递给class_b_ref
#version 1
def func_in_classA1(self,class_b_parameter=None):
class_b_ref=ClassB
if class_b_parameter== None:
print "the parameter is null"
return
else:
class_b_ref= class_b_parameter
class_b_ref.DoSthByB()
PS:版本1可以使用,但是提到“ class_b_ref = ClassB”的系统未使用,因为在“ else”中分配了另一个值。我想我仍然尝试使用C#的“广播”习惯,但是Python是一种动态语言,从上面的代码我更改为version2
# Version2:
def func_in_classA2(self,class_b_parameter=None):
if class_b_parameter== None:
print "the parameter is null"
return
elif isinstance(class_b_parameter,ClassB):
pass
class_b_ref.DoSthByB()
它可以工作,如果有任何更好的或正式的方法可以用Python进行,请通知我。