中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python動態語言的特性有哪些

發布時間:2020-08-25 14:27:03 來源:億速云 閱讀:326 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關Python動態語言的特性有哪些,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一、動態語言的定義

動態語言是在運行時確定數據類型的語言。變量使用之前不需要類型聲明,通常變量的類型是被賦值的那個值的類型。現在比較熱門的動態語言有:Python、PHP、JavaScript、Objective-C等,而 C 、 C++ 等語言則不屬于動態語言。

二、運行的過程中給對象綁定(添加)屬性

class Person(object):
    def __init__(self,name=None,age=None):
        self.name=name
        self.age=age
p = Person("小明","24")
print(p.name)
print(p.age)

運行結果為:

小明
24

這里我們只定義了name和age兩個屬性,但是在類已經定義好了之后,我們仍然可以往里面添加屬性,這就是動態語言的好處,動態的給實例綁定屬性:

class Person(object):
    def __init__(self,name=None,age=None):
        self.name=name
        self.age=age
p = Person("小明","24")
print(p.name)
print(p.age)
#動態添加屬性
p.sex = "男"
print(p.sex)

運行結果為:

小明
24
男

三、運行的過程中給類綁定(添加)屬性

class Person(object):
    def __init__(self,name=None,age=None):
        self.name=name
        self.age=age
P1 = Person("小明",24)
print(P1.sex)

運行結果為:

Traceback (most recent call last):
  File "C:\Users\Se7eN_HOU\Desktop\test.py", line 8, in <module>
    print(P1.sex)
AttributeError: 'Person' object has no attribute 'sex'

這是程序報錯說,Person沒有sex這個屬性,我們可以通過給Person動態綁定屬性,解決問題。

class Person(object):
    def __init__(self,name=None,age=None):
        self.name=name
        self.age=age
P1 = Person("小明",24)
#動態給類添加屬性
Person.sex = "男"
print(P1.sex)

這個時候在運行就不會出錯,而且會打印出P1.sex為男。

四、運行的過程中給類綁定(添加)方法

class Person(object):
    def __init__(self,name=None,age=None):
        self.name=name
        self.age=age
    def eat(self):
        print("正在吃東西")
P1 = Person("小明",24)
P1.eat()
P1.run()

運行結果為:

正在吃東西
Traceback (most recent call last):
  File "C:\Users\Se7eN_HOU\Desktop\test.py", line 11, in <module>
    P1.run()
AttributeError: 'Person' object has no attribute 'run'

說明:正在吃東西打印出來了,說明eat函數被執行,但是后面報錯說沒有run這個屬性,但是我想在類創建好了以后,在運行的時候動態的添加run方法怎么辦呢?

#動態添加方法需要導入types模塊
import types
class Person(object):
    def __init__(self,name=None,age=None):
        self.name=name
        self.age=age
    def eat(self):
        print("正在吃東西")
#定義好需要動態添加的方法
def run(self):
    print("在跑步")
    
P1 = Person("小明",24)
#正常調用類里面的函數
P1.eat()
#給對象動態綁定方法
P1.run = types.MethodType(run,P1)
#對象調用動態綁定的方法
P1.run()

運行結果為:

正在吃東西
在跑步

打印出來“在跑步”說明run方法被正常執行了

動態綁定類方法和靜態方法

#動態添加方法需要導入types模塊
import types
class Person(object):
    def __init__(self,name=None,age=None):
        self.name=name
        self.age=age
    def eat(self):
        print("正在吃東西")
#定義好需要動態添加的實例方法
def run(self):
    print("在跑步")
#定義好需要動態添加的類方法
@classmethod
def dynamicClassMethod(cls):
    print("這是一個動態添加的類方法")
#定義好需要動態添加的靜態方法
@staticmethod
def dynamicStaticMethod():
    print("這是一個動態添加的靜態方法")
    
P1 = Person("小明",24)
#正常調用類里面的函數
P1.eat()
#給對象動態綁定方法
#MethodType(參數1,參數2)
#參數1:是動態綁定哪個方法,只寫方法名即可
#參數2:是把這個方法動態的綁定給誰
P1.run = types.MethodType(run,P1)
P1.run()
#動態綁定類方法的使用
Person.dynamicClassMethod = dynamicClassMethod
Person.dynamicClassMethod()
#動態綁定靜態方法的使用
Person.dynamicStaticMethod = dynamicStaticMethod
Person.dynamicStaticMethod()

總結:

1.給對象綁定屬性直接在使用前進行賦值使用即可。

2.給對象動態綁定方法需要import types模塊。

3.給對象動態綁定實例方法,需要使用type.MethodType()方法。

4.給類添加類方法和靜態方法,也是直接在使用前賦值即可使用。

五、運行的過程中刪除屬性、方法

刪除的方法:

1.del 對象.屬性名

2.delattr(對象, "屬性名")

class Person(object):
    def __init__(self,name=None,age=None):
        self.name=name
        self.age=age
P1 = Person("小明",24)
print("---------刪除前---------")
print(P1.name)
del P1.name
print("---------刪除后---------")
print(P1.name)

運行結果為:

---------刪除前---------
小明
---------刪除后---------
print(P1.name)AttributeError: 'Person' object has no attribute 'name'

六、__slots__

動態語言:可以在運行的過程中,修改代碼。

靜態語言:編譯時已經確定好代碼,運行過程中不能修改。

如果我們想要限制實例的屬性怎么辦?比如,只允許對Person實例添加name和age屬性。

為了達到限制的目的,Python允許在定義class的時候,定義一個特殊的__slots__變量,來限制該class實例能添加的屬性:

class Person(object):
    __slots__=("name","age")
p = Person()
p.name = "老王"
p.age = 40
print(p.name)
print(p.age)
#slots之外的屬性
p.sex = "男"
print(p.sex)

運行結果為:

老王
40
    p.sex = "男"
AttributeError: 'Person' object has no attribute 'sex'

注意:

使用__slots__要注意,__slots__定義的屬性僅對當前類實例起作用,對繼承的子類是不起作用的。

上述就是小編為大家分享的Python動態語言的特性有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

独山县| 靖安县| 宾阳县| 晋州市| 宁河县| 迁安市| 攀枝花市| 武夷山市| 若羌县| 禹州市| 邢台县| 东安县| 高碑店市| 赤壁市| 昌吉市| 天镇县| 鹤壁市| 水城县| 商南县| 哈巴河县| 杭锦后旗| 双辽市| 锡林浩特市| 广东省| 罗山县| 公安县| 缙云县| 故城县| 砚山县| 黄石市| 桦甸市| 独山县| 安乡县| 元江| 民权县| 马鞍山市| 锡林浩特市| 清河县| 合山市| 长海县| 宜阳县|