欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python語(yǔ)法學(xué)習(xí)之super(),繼承與派生

 更新時(shí)間:2022年05月30日 11:35:33   作者:??Python編程學(xué)習(xí)圈????  
這篇文章主要介紹了python語(yǔ)法學(xué)習(xí)之super(),繼承與派生,繼承是一種創(chuàng)建新類(lèi)的方式,具體的super()派生的相關(guān)詳細(xì)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容

1 什么是繼承?

繼承是一種創(chuàng)建新類(lèi)的方式;

在Python中,新建的類(lèi)可以繼承一個(gè)或多個(gè)父類(lèi),新建的類(lèi)可稱為子類(lèi)或派生類(lèi),父類(lèi)又可稱為基類(lèi)或超類(lèi)。

繼承可以用來(lái)解決類(lèi)與類(lèi)之間的代碼重用性問(wèn)題;

class ParentClass1: #定義父類(lèi)
    pass
class ParentClass2: #定義父類(lèi)
    pass
class SubClass1(ParentClass1): #單繼承
    pass
class SubClass2(ParentClass1,ParentClass2): #多繼承
    pass

注意:

在python中一個(gè)子類(lèi)可以繼承多個(gè)父類(lèi),在其他語(yǔ)言中,一個(gè)子類(lèi)只能繼承一個(gè)父類(lèi);

python中的繼承分為單繼承和多繼承;

通過(guò)類(lèi)的內(nèi)置屬性__bases__可以查看類(lèi)繼承的所有父類(lèi)

>>> SubClass2.__bases__
(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)

在Python3中只有新式類(lèi),即使沒(méi)有顯式地繼承object,也會(huì)默認(rèn)繼承該類(lèi)。

2 繼承的規(guī)則

子類(lèi)繼承父類(lèi)的成員變量和成員方法:

  • 子類(lèi)不繼承父類(lèi)的構(gòu)造方法,能夠繼承父類(lèi)的析構(gòu)方法
  • 子類(lèi)不能刪除父類(lèi)的成員,但可以重定義父類(lèi)成員
  • 子類(lèi)可以增加自己的成員

示例:

# python中子類(lèi)繼承父類(lèi)成員變量之間的取值邏輯
class Person():
    def __init__(self, name, age, sex):
        self.name = "jasn"
        self.age = '18'
        self.sex = sex
    def talk(self):
        print("i want to speak something to yo!!")
class Chinese(Person):
    def __init__(self, name, age, sex, language):
        Person.__init__(self, name, age, sex)  # 用父類(lèi)的name,age,sex 覆蓋掉子類(lèi)的屬性
        self.age = age  # 覆蓋掉了父類(lèi)的age,取值為子類(lèi)實(shí)例中傳入age參數(shù)
        self.language = "chinese"
    def talk(self):
        print("我說(shuō)的是普通話?。?)
        Person.talk(self)
obj = Chinese("nancy",'18','male',"普通話")
print(obj.name)  # 對(duì)應(yīng)場(chǎng)景A
print(obj.age)  # 對(duì)應(yīng)場(chǎng)景B
print(obj.language)  # 對(duì)應(yīng)場(chǎng)景C
obj.talk()  # 對(duì)應(yīng)場(chǎng)景D
# 總結(jié):
# A:若父類(lèi)中初始化了成員變量,子類(lèi)調(diào)用父類(lèi)構(gòu)造方法未覆蓋屬性(self.name),則調(diào)用子類(lèi)屬性時(shí)取值為父類(lèi)中初始化的成員變量;
# B:若父類(lèi)中初始化了成員變量,若子類(lèi)調(diào)用父類(lèi)構(gòu)造方法覆蓋屬性(self.age)則取值為子類(lèi)實(shí)例中傳入?yún)?shù)
# C:若父類(lèi)未初始化該成員變量,則無(wú)論子類(lèi)中有無(wú)進(jìn)行對(duì)父類(lèi)構(gòu)造方法進(jìn)行屬性的覆蓋,均取子類(lèi)實(shí)例中傳入的參數(shù)
# D:對(duì)于方法,如果子類(lèi)有這個(gè)方法則直接調(diào)用,如果子類(lèi)沒(méi)有則去父類(lèi)查找。父類(lèi)沒(méi)有則報(bào)錯(cuò)

3 繼承原理

對(duì)于你定義的每一個(gè)類(lèi),python會(huì)計(jì)算出一個(gè)方法解析順序(MRO)列表,這個(gè)MRO列表就是一個(gè)簡(jiǎn)單的所有基類(lèi)的線性順序列表。

>>> D.mro() # 新式類(lèi)內(nèi)置了mro方法可以查看線性列表的內(nèi)容,經(jīng)典類(lèi)沒(méi)有該內(nèi)置方法
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

python會(huì)在MRO列表上從左到右開(kāi)始查找基類(lèi),直到找到第一個(gè)匹配這個(gè)屬性的類(lèi)為止,而這個(gè)MRO列表的構(gòu)造是通過(guò)一個(gè)C3線性化算法來(lái)實(shí)現(xiàn)的。

實(shí)際上就是合并所有父類(lèi)的MRO列表并遵循如下三條準(zhǔn)則:

  • 子類(lèi)會(huì)先于父類(lèi)被檢查
  • 多個(gè)父類(lèi)會(huì)根據(jù)它們?cè)诹斜碇械捻樞虮粰z查
  • 如果對(duì)下一個(gè)類(lèi)存在兩個(gè)合法的選擇,選擇第一個(gè)父

Python 中的 MRO —— 方法搜索順序

Python中針對(duì)類(lèi)提供了一個(gè)內(nèi)置屬性 mro 可以查看方法搜索順序

MRO 是 method resolution order,主要用于在多繼承時(shí)判斷方法、屬性 的調(diào)用路徑。

print(C.__mro__)  #C是多繼承后的類(lèi)名

輸出結(jié)果:

(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)

在搜索方法時(shí),是按照 mro 的輸出結(jié)果 從左至右 的順序查找的;

如果在當(dāng)前類(lèi)中找到方法,就直接執(zhí)行,不再搜索;如果沒(méi)有找到,就查找下一個(gè)類(lèi)中是否有對(duì)應(yīng)的方法,如果找到,就直接執(zhí)行,不再搜索。

如果找到最后一個(gè)類(lèi),還沒(méi)有找到方法,程序報(bào)錯(cuò)。

4 多繼承屬性查詢順序

(1)多繼承結(jié)構(gòu)為菱形結(jié)構(gòu)

如果繼承關(guān)系為菱形結(jié)構(gòu),那么經(jīng)典類(lèi)與新式類(lèi)會(huì)有不同MRO。

箭頭表示搜索順序

(2)多繼承結(jié)構(gòu)為非菱形結(jié)構(gòu)

會(huì)按照先找B這一條分支,然后再找C這一條分支,最后找D這一條分支的順序直到找到我們想要的屬性。

5 查找流程

① 由對(duì)象發(fā)起的屬性查找,會(huì)從對(duì)象自身的屬性里檢索,沒(méi)有則會(huì)按照對(duì)象的類(lèi).mro()規(guī)定的順序依次找下去。

② 由類(lèi)發(fā)起的屬性查找,會(huì)按照當(dāng)前類(lèi).mro()規(guī)定的順序依次找下去。

主要知識(shí)點(diǎn):類(lèi)的__mro__ 屬性的用法;

屬性查找

有了繼承關(guān)系,對(duì)象在查找屬性時(shí),先從對(duì)象自己的__dict__中找,如果沒(méi)有則去子類(lèi)中找,然后再去父類(lèi)中找.....

class Foo:
    def f1(self):
        print('Foo.f1')
    def f2(self):
        print('Foo.f2')
        self.f1() 

class Bar(Foo):
    def f1(self):
        print('Bar.f1')
b=Bar()
b.f2()
# 運(yùn)行結(jié)果:
Foo.f2
Bar.f1
# 運(yùn)行流程分析:
b.f2()會(huì)在父類(lèi)Foo中找到f2,先打印Foo.f2,然后執(zhí)行到self.f1(),即b.f1(),仍會(huì)按照:對(duì)象本身->類(lèi)Bar->父類(lèi)Foo的順序依次找下去,在類(lèi)Bar中找到f1,因而打印結(jié)果為Bar.f1

父類(lèi)如果不想讓子類(lèi)覆蓋自己的方法,可以采用雙下劃線開(kāi)頭的方式將方法設(shè)置為私有的:

class Foo:
    def __f1(self): # 變形為_(kāi)Foo__f1
        print('Foo.f1') 
    def f2(self):
        print('Foo.f2')
        self.__f1() # 變形為self._Foo__f1,然后回到Bar類(lèi)中找,沒(méi)有,再到Foo中找到了
class Bar(Foo):
    def __f1(self): # 變形為_(kāi)Bar__f1
        print('Bar.f1')
b=Bar() # Bar類(lèi)處于執(zhí)行階段,_Bar__f1變?yōu)開(kāi)_f1
b.f2() # 在父類(lèi)中找到f2方法,進(jìn)而調(diào)用b._Foo__f1()方法,是在父類(lèi)中找到的f1方法

# 運(yùn)行結(jié)果:
Foo.f2
Foo.f1

6 繼承概念的實(shí)現(xiàn)

方式主要有2類(lèi):

  • 實(shí)現(xiàn)繼承
  • 接口繼承

① 實(shí)現(xiàn)繼承是指使用基類(lèi)的屬性和方法而無(wú)需額外編碼的能力。

② 接口繼承是指僅使用屬性和方法的名稱、但是子類(lèi)必須提供實(shí)現(xiàn)的能力(子類(lèi)重構(gòu)爹類(lèi)方法)。

在考慮使用繼承時(shí),有一點(diǎn)需要注意,那就是兩個(gè)類(lèi)之間的關(guān)系應(yīng)該是“屬于”關(guān)系。

例如:Employee 是一個(gè)人,Manager 也是一個(gè)人,因此這兩個(gè)類(lèi)都可以繼承 Person 類(lèi),但是 Leg 類(lèi)卻不能繼承 Person 類(lèi),因?yàn)橥炔⒉皇且粋€(gè)人。

7 私有屬性私有方法在繼承中的表現(xiàn)

父類(lèi)中的私有方法和私有屬性都是不能被子類(lèi)繼承下來(lái)的;

測(cè)試示例:父類(lèi)中的私有屬性和私有方法是否能被繼承下來(lái)?

class Perpon:
    num = 20
    __num1 = 12
    def __test1(self):
        print('__test1....')
    def test2(self):
        print('test2...')
class Student(Perpon):
    def test(self):
        print('num...')
        print(self.num)
        # print(Student.__num1)
        self.test2()
        # self.__test1()
 
student = Student()
student.test()
student.test2()
# student.__test1() # 報(bào)錯(cuò)
'''
num...
20
test2...
test2...
'''

8 派生類(lèi)

1)在父類(lèi)的基礎(chǔ)上產(chǎn)生子類(lèi),產(chǎn)生的子類(lèi)就叫做派生類(lèi)

2)父類(lèi)里沒(méi)有的方法,在子類(lèi)中有了,這樣的方法就叫做派生方法。

3)父類(lèi)里有,子類(lèi)也有的方法,就叫做方法的重寫(xiě)(就是把父類(lèi)里的方法重寫(xiě)了)

class Hero:
    def __init__(self, nickname,aggressivity,life_value):
        self.nickname = nickname
        self.aggressivity = aggressivity
        self.life_value = life_value
    def attack(self, enemy):
        print('Hero attack')
class Garen(Hero):
    camp = 'Demacia'
    def attack(self, enemy): #self=g1,enemy=r1
        # self.attack(enemy) #g1.attack(r1),這里相當(dāng)于無(wú)限遞歸
        Hero.attack(self,enemy)  # 引用 父類(lèi)的 attack,對(duì)象會(huì)去跑 父類(lèi)的 attack
        print('from garen attack')  # 再回來(lái)這里
    def fire(self):
        print('%s is firing' % self.nickname)
class Riven(Hero):
    camp = 'Noxus'
g1 = Garen('garen', 18, 200)
r1 = Riven('rivren', 18, 200)
g1.attack(r1)
# print(g1.camp)
# print(r1.camp)
# g1.fire()

9 屬性的覆蓋(派生屬性)

子類(lèi)也可以添加自己新的屬性或者在自己這里重新定義這些屬性(不會(huì)影響到父類(lèi));

需要注意的是:一旦重新定義了自己的屬性且與父類(lèi)重名,那么調(diào)用新增的屬性時(shí),就以自己為準(zhǔn)了(屬性的覆蓋)。

示例:

# 派生屬性: 子類(lèi)中自己添加的新屬性
# 屬性的覆蓋: 子類(lèi)和父類(lèi)有相同屬性,調(diào)用自己的
class Perpon:
    num = 20
    def __init__(self, name):
        print('person...')
class Student(Perpon):
    num = 10  # 把父類(lèi)中的20覆蓋
    def __init__(self, name, age):  # age 為派生屬性
        super().__init__(name)
        self.name = name
        self.age = age
        print('student...')
    def study(self):
        print(super().num)
        pass
student = Student('趙四', 23)
print(student.name) # person...
print(student.age)
print(student.num)
student.study()
'''
person...
student...
趙四
23
10
20
'''

10 父類(lèi)屬性(方法)的重用

指名道姓的重用

class A:
    def __init__(self):
        print('A的構(gòu)造方法')
class B(A):
    def __init__(self):
        print('B的構(gòu)造方法')
        A.__init__(self)
class C(A):
    def __init__(self):
        print('C的構(gòu)造方法')
        A.__init__(self)
class D(B,C):
    def __init__(self):
        print('D的構(gòu)造方法')
        B.__init__(self)  # 先找到B,B調(diào)用A,等這個(gè)線性任務(wù)處理完之后,在繼續(xù)下一行代碼
        C.__init__(self)  # 先找到C,C里面也調(diào)用A的方法
    pass
f1=D()  #A.__init__被重復(fù)調(diào)用
'''
D的構(gòu)造方法
B的構(gòu)造方法
A的構(gòu)造方法
C的構(gòu)造方法
A的構(gòu)造方法
'''

Super()方法重用

class A:
    def __init__(self):
        print('A的構(gòu)造方法')
class B(A):
    def __init__(self):
        print('B的構(gòu)造方法')
        super(B,self).__init__()
class C(A):
    def __init__(self):
        print('C的構(gòu)造方法')
        super(C,self).__init__()
class D(B,C):
    def __init__(self):
        print('D的構(gòu)造方法')
        super().__init__()  # super(D,self).__init__()
f1=D() #super()會(huì)基于mro列表,往后找
'''
D的構(gòu)造方法
B的構(gòu)造方法
C的構(gòu)造方法
A的構(gòu)造方法
'''
# super() 語(yǔ)法
# super(type[, object-or-type])   type 當(dāng)前類(lèi),object-or-type 為實(shí)例化對(duì)象,一般默認(rèn)為self,不過(guò)該參數(shù)在python3中默認(rèn)

super()是一個(gè)特殊的類(lèi),調(diào)用super得到一個(gè)對(duì)象,該對(duì)象指向父類(lèi)的名稱空間。

派生與繼承解決問(wèn)題:子類(lèi)重用父類(lèi)的屬性,并派生出新的屬性。

注意:使用哪一種都可以,但不能兩種方式混合使用!

11 繼承派生機(jī)制的作用

可以將一些共用的功能加在基類(lèi)中,實(shí)現(xiàn)代碼的共享;

在不改變基類(lèi)的基礎(chǔ)上改變?cè)械墓δ埽?/p>

練習(xí):

list類(lèi)里只有append向末尾加一個(gè)元素的方法,但沒(méi)有向列表頭部添加元素的方法,試想能否為列表在不改變?cè)泄δ艿幕A(chǔ)上添加一個(gè)inster_head(x)方法,此方法能在列表的前部添加元素?

class Mylist(list):
    def insert_head(self,x):
        # self.reverse()
        # self.append(x)
        # self.reverse()
        self.insert(0,x)  #直接在最開(kāi)始插入x
myl = Mylist(range(3,6))
print(myl)      #[3.4.5]
myl.insert_head(2)
print(myl)      #[2,3,4,5]
myl.append(6)
print(myl)      #[2,3,4,5,6]

12 Super()

super(cls,obj)返回被綁定超類(lèi)的實(shí)例(要求obj必須為cls類(lèi)型的實(shí)例)

super() 返回被綁定超類(lèi)的實(shí)例,等同于:super(class,實(shí)例方法的第一個(gè)參數(shù),必須在方法內(nèi)調(diào)用)

格式:

父類(lèi)類(lèi)名.方法名稱(self) 或者 super().方法名稱()或者super(本類(lèi)類(lèi)名,對(duì)象名)

作用:借助super()返回的實(shí)例間接調(diào)用父類(lèi)的覆蓋方法;

示例:

#此示例示意用super函數(shù)間接調(diào)用父類(lèi)的
class A:
    def work(self):
        print('A.work被調(diào)用')
class B(A):
    '''B類(lèi)繼承子A類(lèi)'''
    def work(self):
        print('B.work被調(diào)用')
    def super_work(self):
        #調(diào)用b類(lèi)自己的work方法
        self.work()
        #調(diào)用父類(lèi)的work
        super(B,self).work()
        super().work()  #此種調(diào)用方式只能在實(shí)例方法內(nèi)調(diào)用
b = B()
# b.work()            #B.work被調(diào)用!!
# super(B,b).work()   #A.work被調(diào)用
b.super_work()
# super_work()   #出錯(cuò)

調(diào)用super()會(huì)得到一個(gè)特殊的對(duì)象,該對(duì)象專(zhuān)門(mén)用來(lái)引用父類(lèi)的屬性,且繼承順序嚴(yán)格遵循mro繼承序列;

示例:

class Father1:
    x =10
    pass
class Father2:
    x = 20
    pass
#多繼承的情況下,從左到右
class Sub(Father1,Father2):
    def __init__(self):   #注意__int__不是__init__
        print(super().__delattr__)
print(Sub.mro())   # [<class '__main__.Sub'>, <class '__main__.Father1'>, <class '__main__.Father2'>, <class 'object'>]
obj = Sub()
print(object)   #<class 'object'>

mro():會(huì)把當(dāng)前類(lèi)的繼承關(guān)系列出來(lái),嚴(yán)格按照mro列表的順序往后查找

class A:        #默認(rèn)繼承object
    def test(self):
        print('from A.test')
        super().test()
class B:
    def test(self):
        print('from B.test')
class C(A, B):
    pass
c = C()
#檢查super的繼承順序
#mro(): 會(huì)把當(dāng)前類(lèi)的繼承關(guān)系列出來(lái)。
print(C.mro()) #[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
c.test()    #from A.test
            #from B.test

使用super調(diào)用父類(lèi)中的方法,注意分析程序的執(zhí)行順序。

class Parent(object):
    def __init__(self, name, *args, **kwargs):  # 為避免多繼承報(bào)錯(cuò),使用不定長(zhǎng)參數(shù),接受參數(shù)
        print('parent的init開(kāi)始被調(diào)用')
        self.name = name
        print('parent的init結(jié)束被調(diào)用')
class Son1(Parent):
    def __init__(self, name, age, *args, **kwargs):  # 為避免多繼承報(bào)錯(cuò),使用不定長(zhǎng)參數(shù),接受參數(shù)
        print('Son1的init開(kāi)始被調(diào)用')
        self.age = age
        super().__init__(name, *args, **kwargs)  # 為避免多繼承報(bào)錯(cuò),使用不定長(zhǎng)參數(shù),接受參數(shù)
        print('Son1的init結(jié)束被調(diào)用')
class Son2(Parent):
    def __init__(self, name, gender, *args, **kwargs):  # 為避免多繼承報(bào)錯(cuò),使用不定長(zhǎng)參數(shù),接受參數(shù)
        print('Son2的init開(kāi)始被調(diào)用')
        self.gender = gender
        super().__init__(name, *args, **kwargs)  # 為避免多繼承報(bào)錯(cuò),使用不定長(zhǎng)參數(shù),接受參數(shù)
        print('Son2的init結(jié)束被調(diào)用')
class Grandson(Son1, Son2):
    def __init__(self, name, age, gender):
        print('Grandson的init開(kāi)始被調(diào)用')
        # 多繼承時(shí),相對(duì)于使用類(lèi)名.__init__方法,要把每個(gè)父類(lèi)全部寫(xiě)一遍
        # 而super只用一句話,執(zhí)行了全部父類(lèi)的方法,這也是為何多繼承需要全部傳參的一個(gè)原因
        # super(Grandson, self).__init__(name, age, gender) 效果和下面的一樣
        super().__init__(name, age, gender)
        print('Grandson的init結(jié)束被調(diào)用')
print(Grandson.__mro__) #搜索順序
gs = Grandson('grandson', 12, '男')
print('姓名:', gs.name)
print('年齡:', gs.age)
print('性別:', gs.gender)
 
'''結(jié)果如下:
(<class '__main__.Grandson'>, <class '__main__.Son1'>, <class '__main__.Son2'>, <class '__main__.Parent'>, <class 'object'>)
Grandson的init開(kāi)始被調(diào)用
Son1的init開(kāi)始被調(diào)用
Son2的init開(kāi)始被調(diào)用
parent的init開(kāi)始被調(diào)用
parent的init結(jié)束被調(diào)用
Son2的init結(jié)束被調(diào)用
Son1的init結(jié)束被調(diào)用
Grandson的init結(jié)束被調(diào)用
姓名:grandson
年齡:12
性別:男
'''

注意:在上面模塊中,當(dāng)在子類(lèi)中通過(guò)super調(diào)用父類(lèi)方法時(shí),parent被執(zhí)行了1次。

super調(diào)用過(guò)程:上面gs初始化時(shí),先執(zhí)行g(shù)randson中init方法, 其中的init有super調(diào)用,每執(zhí)行到一次super時(shí),都會(huì)從__mro__方法元組中順序查找搜索。

所以先調(diào)用son1的init方法,在son1中又有super調(diào)用,這個(gè)時(shí)候就就根據(jù)__mro__表去調(diào)用son2的init,然后在son2中又有super調(diào)用,這個(gè)就根據(jù)mro表又去調(diào)用parent中的init,直到調(diào)用object中的init。

所以上面的打印結(jié)果如此,要仔細(xì)分析執(zhí)行過(guò)程。

重點(diǎn)提示:

  • 1)super().__init__相對(duì)于類(lèi)名.init,在單繼承上用法基本無(wú)差
  • 2)但在多繼承上有區(qū)別,super方法能保證每個(gè)父類(lèi)的方法只會(huì)執(zhí)行一次,而使用類(lèi)名的方法會(huì)導(dǎo)致方法被執(zhí)行多次,具體看前面的輸出結(jié)果。
  • 3)多繼承時(shí),使用super方法,對(duì)父類(lèi)的傳參數(shù),應(yīng)該是由于python中super的算法導(dǎo)致的原因,必須把參數(shù)全部傳遞,否則會(huì)報(bào)錯(cuò)。
  • 4)單繼承時(shí),使用super方法,則不能全部傳遞,只能傳父類(lèi)方法所需的參數(shù),否則會(huì)報(bào)錯(cuò)。
  • 5)多繼承時(shí),相對(duì)于使用類(lèi)名.__init__方法,要把每個(gè)父類(lèi)全部寫(xiě)一遍, 而使用super方法,只需寫(xiě)一句話便執(zhí)行了全部父類(lèi)的方法。

這也是為何多繼承需要全部傳參的一個(gè)原因

練習(xí)一

子類(lèi)調(diào)用自己的方法的時(shí)候同時(shí)調(diào)用父類(lèi)的方法

class Dog(Animal):
    def sleep(self):
        # 方法一 父類(lèi).方法名(對(duì)象)
        # Animal.eat(self)
        # 方法二 super(子類(lèi),對(duì)象名).方法名()
        super(Dog,dog).sleep()
        print('去狗窩')
    def look_door(self):
        print('看門(mén)狗')
dog = Dog('哈巴狗',23)
dog.sleep() 
'''
睡覺(jué)
去狗窩
'''

練習(xí)二

在類(lèi)的外部調(diào)用super()

# 類(lèi)外部調(diào)用super()
dog = Dog('哈巴狗', 23)
super(Dog, dog).sleep() # super(子類(lèi),對(duì)象名).方法名()
dog.sleep()
'''
睡覺(jué)
去狗窩
'''

到此這篇關(guān)于python語(yǔ)法學(xué)習(xí)之super(),繼承與派生的文章就介紹到這了,更多相關(guān)python 繼承與派生內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 虛擬環(huán)境venv詳解

    Python 虛擬環(huán)境venv詳解

    Python 虛擬環(huán)境主要是為不同 Python 項(xiàng)目創(chuàng)建一個(gè)隔離的環(huán)境,每個(gè)項(xiàng)目都可以擁有獨(dú)立的依賴包環(huán)境,而項(xiàng)目間的依賴包互不影響,對(duì)Python 虛擬環(huán)境venv相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-09-09
  • Python模擬FTP文件服務(wù)器的操作方法

    Python模擬FTP文件服務(wù)器的操作方法

    這篇文章主要介紹了Python_模擬FTP文件服務(wù)器的操作方法,分為服務(wù)端和客戶端,要求可以有多個(gè)客戶端同時(shí)操作。本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-02-02
  • python設(shè)置環(huán)境變量的作用整理

    python設(shè)置環(huán)境變量的作用整理

    在本篇文章里小編給大家整理的是關(guān)于python設(shè)置環(huán)境變量的作用整理內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • Python文本處理之按行處理大文件的方法

    Python文本處理之按行處理大文件的方法

    下面小編就為大家分享一篇Python文本處理之按行處理大文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python對(duì)小數(shù)進(jìn)行除法運(yùn)算的正確方法示例

    Python對(duì)小數(shù)進(jìn)行除法運(yùn)算的正確方法示例

    這篇文章主要介紹了Python對(duì)小數(shù)進(jìn)行除法運(yùn)算的正確方法示例,正確的方法是需要轉(zhuǎn)換成浮點(diǎn)數(shù),否則永遠(yuǎn)不會(huì)得到正確結(jié)果,需要的朋友可以參考下
    2014-08-08
  • python 實(shí)現(xiàn)mysql增刪查改示例代碼

    python 實(shí)現(xiàn)mysql增刪查改示例代碼

    python中可以通過(guò)pymysql實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的連接,并實(shí)現(xiàn)數(shù)據(jù)庫(kù)的各種操作,這篇文章主要給大家介紹了關(guān)于pymsql實(shí)現(xiàn)增刪改查的示例代碼,需要的朋友可以參考下
    2021-11-11
  • 置信橢圓原理以及橢圓圖形繪制方式

    置信橢圓原理以及橢圓圖形繪制方式

    這篇文章主要介紹了置信橢圓原理以及橢圓圖形繪制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python第三方庫(kù)的安裝方法總結(jié)

    Python第三方庫(kù)的安裝方法總結(jié)

    庫(kù)library是一個(gè)泛稱,一般值作為文件形式存在的模塊以及以文件夾形式存在的包的合成,這里作了Python第三方庫(kù)的安裝方法總結(jié),包括源碼安裝、包管理器安裝以及虛擬環(huán)境相關(guān)安裝三種方式的講解
    2016-06-06
  • 利用Python爬蟲(chóng)給孩子起個(gè)好名字

    利用Python爬蟲(chóng)給孩子起個(gè)好名字

    每個(gè)人一生中都會(huì)遇到一件事情,在事情出現(xiàn)之前不會(huì)關(guān)心,但是事情一旦來(lái)臨就發(fā)現(xiàn)它極其重要,并且需要在很短的時(shí)間內(nèi)做出重大決定,那就是給自己的新生寶寶起個(gè)名字。下面這篇文章主要介紹了如何利用Python爬蟲(chóng)給孩子起個(gè)好名字,需要的朋友可以參考下。
    2017-02-02
  • Python Pandas中創(chuàng)建Series的三種方法總結(jié)

    Python Pandas中創(chuàng)建Series的三種方法總結(jié)

    這篇文章主要介紹了Python Pandas中創(chuàng)建Series的三種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論