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

溫馨提示×

溫馨提示×

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

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

Python相關問題代碼分析

發布時間:2023-04-13 11:07:41 來源:億速云 閱讀:105 作者:iii 欄目:編程語言

這篇文章主要介紹“Python相關問題代碼分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python相關問題代碼分析”文章能幫助大家解決問題。

1、反射算術運算符

你可能知道 Python 里面的魔法函數,比如 __add__ 和 __sub__ 代表 + - 運算符,表示 obj +/- something,但你可能不知道還有一個 __radd__,__rsub__ 函數,可以表示 something +/- obj。

舉例如下:

class Dog:
def __add__(self, other):
return "from __add__"
def __radd__(self, other):
return "from __radd__"
dog = Dog()
print(dog + 1) # from __add__
print(1 + dog) # from __radd__
2、__getattr__ vs __getattribute__

__getattr__ 魔術方法只有在我們試圖獲取不存在的屬性時才會被調用,__getattribute__ 在每次我們嘗試訪問屬性時都會被調用。

代碼如下:

class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def __getattr__(self, key):
return f"{key} not found"
dog = Dog("taidi", 5)
print(dog.name)# taidi
print(dog.age) # 5
print(dog.breed) # breed not found
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def __getattribute__(self, key):
return f"{key} not found"
dog = Dog("taidi", 5)
print(dog.name)# name not found
print(dog.age) # age not found
print(dog.breed) # breed not found
3、super().__init__() 的另一種寫法
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
class Dog(Animal):
def __init__(self, name, age, breed):
super().__init__(name, age)
self.breed = breed

等價于:

class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
class Dog(Animal):
def __init__(self, name, age, breed):
Animal.__init__(self, name, age)
self.breed = breed

請注意,Animal.__init__(self, name, age) 不能少了 self 參數。

4、檢查子類的方法
class Animal: pass
class Dog(Animal): pass
class Cat(Animal): pass
class GermanSheperd(Dog): pass
print(Animal.__subclasses__())
# [,]

不過,.__subclasses__() 只能檢查直接子類。

5、多重集成時,同名函數,子類用的是哪一個?
class A:
def test(self):
print("A")
class B:
def test(self):
print("B")
class C(A, B):
pass

C().test() # A

A 和 B 都有 test 方法,那么 C 到底集成了哪一個呢?在 Python 中,最左邊的類優先。

在這里,A 是最左邊的父類,因此 A 的 test 方法被集成。

多充繼承讓人困惑,不用為好。

6 __invert__ 魔法函數
class Dog:
def __invert__(self):
return "test"
dog = Dog()
print(~dog) # test

~ 運算符代表“按位非”,通常用于反轉內容。一個更有意義的例子如下:

class Coordinate:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"({self.x}, {self.y})"
def __invert__(self):
return Coordinate(-self.x, -self.y)
a = Coordinate(3, 4)
b = ~a
print(a, b) # (3, 4) (-3, -4)
7、不使用 class 來創建類
def init(self, name, age):
self.name = name
self.age = age
def bark(self):
print("woof")
Dog = type("Dog", (), {"__init__":init, "bark":bark})


dog = Dog("taidi", 10)
print(dog.name)
print(dog.age)

# taidi
# 10

在這里,我們將 3 個參數傳遞給 type 以創建我們的類。

第一個參數 __name__ 是類的名稱 第二個參數 __bases__ 是一個包含父類的元組 第三個參數 __dict__ 是一個包含屬性和方法的字典。

等價于:

class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print("woof")

關于“Python相關問題代碼分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

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

AI

潍坊市| 临高县| 济宁市| 宁城县| 昭平县| 涟源市| 新野县| 永定县| 临高县| 枣庄市| 东辽县| 九寨沟县| 纳雍县| 微山县| 台北市| 黔江区| 新丰县| 木兰县| 昭通市| 股票| 合川市| 张家川| 石嘴山市| 镇雄县| 大姚县| 岫岩| 文安县| 怀化市| 商城县| 沂源县| 杭锦后旗| 四平市| 富民县| 广东省| 桐庐县| 长汀县| 武邑县| 波密县| 禹城市| 晋城| 息烽县|