當前位置:首頁 » 編程語言 » python子類

python子類

發布時間: 2022-01-11 10:12:04

python一個類可以有兩個子類嗎

class subclass(superclass1,superclass2):

一個子類當然可以繼承多個超類,以上表示定義一個subclass類,從類superclass1,superclass2繼承

比如下面的代碼子類C就繼承了A和B類

class A:
def __init__(self):
self.one="one"
class B:
def __init__(self):
self.two="two"

class C(A,B):
def __init__(self):
A.__init__(self)
B.__init__(self)
def printselfnum(self):
print(self.one,self.two)
c=C()
c.printselfnum()

② 請問python如何將一個子類對象賦值給父類對象

classF:
def__init__(self):
pass
deffun(self):
print"InF"

classS(F):
def__init__(self):
F.__init()
deffun(self):
print"InS"

f=S()
f.fun()

python本來就是動態類型的語言,所以本來就不需要像C#那樣的賦值,像上面的代碼即可以實現C#裡面的功能。

③ Python子類與父類的關系問題

  1. 不如貼代碼

  2. 可以去看下 MRO 的東西, 以及類/實例的屬性和__dict__的關系

  3. 屬性是怎麼查找的, getattr, __getattr__, __getattribute__ 這幾個是怎麼運行的...


另外你這個 method 是什麼我真的沒懂... 什麼叫 A類的類名...

④ python 子類怎麼調用父類方法

兩種方法解決:
- 第一種

class A:
def __init__(self):
self.namea="aaa"
def funca(self):
print "function a : %s"%self.namea
class B(A):
def __init__(self):
#這一行解決了問題
A.__init__(self)
self.nameb="bbb"
def funcb(self):
print "function b : %s"%self.nameb
b=B()
print b.nameb
b.funcb()
b.funca()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第二種:
#父類需要繼承object對象
class A(object):
def __init__(self):
self.namea="aaa"
def funca(self):
print "function a : %s"%self.namea
class B(A):
def __init__(self):
#這一行解決問題
super(B,self).__init__()
self.nameb="bbb"
def funcb(self):
print "function b : %s"%self.nameb
b=B()
print b.nameb
b.funcb()
b.funca()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS:讓類A繼承自object類,這樣才能使用super函數,因為這是python的「新式類」支持的特性。當前的class和對象可以作為super函數的參數使用,調用函數返回的對象的任何方法都是調用超類的方法,而不是當前類的方法。

優劣:
- 方法一更直觀,方法二可以一次初始化所有超類
- super函數比在超類中直接調用未綁定方法更直觀,但是其最大的優點是如果子類繼承了多個父類,它只需要使用一次super函數就可以。然而如果沒有這個需求,直接使用A.init(self)更直觀一些。

⑤ Python子類調用父類方法或子類定義的方法輸出會多出個'None'

我覺得最佳的回答的是不對的, 在python中若是函數沒有定義return的結果,則會默認返回一個none

deffunc():
a=1
b=2

a=func()
print(a)

>>>None

在官方文檔中也有說明的,而你列印出none的原因就是因為你在類的方法
中直接列印了字元串沒有返回值,將方法中的pring改成return即可

⑥ python 查看類有哪些子類

遞歸獲取某一父類的所有子類

all_subclasses={'0':'0'}
defget_all_classes(model):
"""
獲取父類的所有子類
"""
forsubclassinmodel.__subclasses__():
#print(subclass._meta.abstract)
if(not(subclass.__name__)inall_subclasses.keys())and(notsubclass._meta.abstract):
all_subclasses[subclass.__name__]=subclass
get_all_classes(subclass)
returnall_subclasses

這里主要用到了__subclasses__() 這個方法,這個方法返回的是這個類的子類的集合,用遞歸的方法,去獲取傳入類型的所有子類。返回給全局變數 all_subclasses這個字典集合。

⑦ python 如何調用子類中的方法呢

別人的是多態,也就是大家都從一個介面繼承,然後子類對象可以當父類用,你這個父類都不知道誰繼承了它,怎麼調用子類方法?你這個思路不太對勁的。

⑧ Python中超類和子類有什麼區別

classa:
pass
classb(a):
pass

b類從a類繼承而來,a就是超類,b就是子類,b類可以使用a類定義的方法,也可以在a類的基礎上定義新的方法,a是基礎類,b是a的擴展

⑨ Python子類繼承,如果不用父類的函數和方法,應該怎麼寫

子類繼承父類時,如果父類有需要初始化的屬性,那麼必須在子類中調用父類的初始化方法,幫助父類進行初始化,否則,子類可以不調用父類的初始化方法

代碼示例

"""
父類Car中沒有屬性需要初始化,所有子類中也不需要調用父類的初始化方法
"""


classCar:

defshow_name(self):
print('carname')


classEeleCar(Car):
pass


car=EeleCar()
car.show_name()

⑩ Python中子類怎樣調用父類方法

python中類的初始化方法是__init__(),因此父類子類的初始化方法都是這個,如果子類不實現這個函數,初始化時調用父類的初始化函數,如果子類實現這個函數,就覆蓋了父類的這個函數,既然繼承父類,就要在這個函數里顯式調用一下父類的__init__(),這跟C++,jAVA不一樣,他們是自動調用父類初始化函數的。 調用父類函數有以下方法: class A: def method(self, arg): pass class B(A): def method(self, arg): # A.method(self,arg) # 1 # super(B, self).method(arg) #2 super().method(arg) #3 1.直接寫類名調用 2.用 super(type, obj).method(arg)方法調用。 3.在類定義中調用本類的父類方法,可以直接 super().method(arg). 在代碼中調用對象的父類的方法的示例: ob = B() super(B,ob).method(arg) #調用class B的父類class A的method。

熱點內容
安卓上哪裡下大型游戲 發布:2024-12-23 15:10:58 瀏覽:188
明日之後目前適用於什麼配置 發布:2024-12-23 14:56:09 瀏覽:52
php全形半形 發布:2024-12-23 14:55:17 瀏覽:827
手機上傳助手 發布:2024-12-23 14:55:14 瀏覽:731
什麼樣的主機配置吃雞開全效 發布:2024-12-23 14:55:13 瀏覽:828
安卓我的世界114版本有什麼 發布:2024-12-23 14:42:17 瀏覽:709
vbox源碼 發布:2024-12-23 14:41:32 瀏覽:275
詩經是怎麼存儲 發布:2024-12-23 14:41:29 瀏覽:659
屏蔽視頻廣告腳本 發布:2024-12-23 14:41:24 瀏覽:418
php解析pdf 發布:2024-12-23 14:40:01 瀏覽:818