python 繼承類的初始化用法


Python 中,子類B繼承父類A時候會用class B(A):的代碼形式聲明B。

class A:
	def __init__(self, x=1, y=2):
		self.x = x
		self.y = y
		print("In class A's init...")

	def Aprint(self):
		print("AAAAAAAAAAAAA")

在子類B的初始化方法默認會覆蓋掉父類A的初始化方法,舉例:

class B(A):
	def __init__(self, z):
		self.z = z
		print("In class B's init...")

	def Bprint(self):
		print("BBBBBBBBBBBBB")

demo = B(3)
print(demo.z)
print(demo.x)
demo.Aprint()
demo.Bprint()

報錯顯示B中找不到成員x(肯定也找不到y成員):

注釋掉demo.x這行就沒問題:

說明子類只是重寫了父類的__init__方法,其他方法(Aprint)得以繼承。
現在在B的__init__方法中加入一行代碼:super().__init__(x, y)或者super(B, self).__init__(x, y),並且接受新的變量x、y:

class B(A):
	def __init__(self, z, x, y):
		# super(B, self).__init__(x, y)
		super().__init__(x, y)
		self.z = z
		print("In class B's init...")

	def Bprint(self):
		print("BBBBBBBBBBBBB")

現在調用全體的變量和方法試試看:

demo = B(3,4,10)
print(demo.z)
print(demo.x)
print(demo.y)

demo.Aprint()
demo.Bprint()


這說明子類B中初始化方法中添加一行super().__init__(x, y)代碼會調用父類A中的初始化方法,而不會直接的覆蓋父類初始化方法,同時注意傳參。
進一步地,子類中任意位置添加super().func(*args)都會調用父類中的func()函數。

需要聲明的一點是,python2中,必須使用super(B, self).func(*args)才能調用父類A中的func()函數;此外父類A也要繼承自object:class A(object):,這在python3中是可以省略的。

修改后:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM