一、C#類繼承中的構造函數
public class Animal:Creature
{
public Animal():this("馬")//注意:這裏是實際參數,不是對參數的定義。
{
Console.WriteLine("這是Animal類");
}
public Animal(string str):base(str)
{
Console.WriteLine($"這是帶參數的Animal類。參數是{str}");
}
}
public class Creature
{
public Creature()
{
Console.WriteLine("這是Creature類");
}
public Creature(string str)
{
Console.WriteLine($"這是帶參數的Creature類,參數是{str}");
}
}
static void Main(string[] args)
{
//第一步,調用Creature()
//第二步,調用Animal("馬")
//第三步,調用Animal()函數體裏的代碼
Animal ani = new Animal();
//第一步,調動Creature("驢")
//第二步,調用Animal("驢")
Animal ani2 = new Animal("驢");
}
輸出是:
二、python類繼承中的構造函數
class Creatrue:
def __int__(self):
print("這是Creature類")
# 以下不是構造函數
# def Creature(self):
# print("這是Creature類")
# def Creatrue(self,str):
# print("這是帶參數的Creature類,參數是"+str)
class Animal(Creatrue):
def __init__(self):
print("這是Animal類")
class Animal_1(Creatrue):
def __init__(self):
Creatrue.__int__(self)
print("這是Animal_1類")
class Animal_2(Creatrue):
def __init__(self):
super(Animal_2, self).__init__()
print("這是Anima1_2類")
#注意:重寫_init__不會自動調用基類的__init__。
#要調用必須明確地寫出代碼。
ani=Animal()
ani1=Animal_1()
ani2=Animal_2()
輸出是:
三、C#和Python此處語法的不同
1.構造函數方法不同
C#中要用類名()作爲構造函數,python中用__init__專有函數作爲構造函數。
2.對基類構造函數調用不同
在c#中調用繼承類構造函數時,會強制調用基類構造函數。python則不調用基類構造函數,除非在繼承類構造函數中明確調用基類構造函數。兩個各有利弊。前者省事,後者自由。