成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

七 個 Python 問題,來掃掃盲

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

這 7 個問題,我是有收獲的,整理如下:

1、反射算術運算符

你可能知道 Python 里面的魔法函數(shù),比如 __add__? 和 __sub__? 代表 + - 運算符,表示 obj +/- something,但你可能不知道還有一個 __radd__,__rsub__ 函數(shù),可以表示 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 參數(shù)。

4、檢查子類的方法

class Animal: pass
class Dog(Animal): pass
class Cat(Animal): pass
class GermanSheperd(Dog): pass
print(Animal.__subclasses__())
# [<class '__main__.Dog'>, <class '__main__.Cat'>]

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

5、多重集成時,同名函數(shù),子類用的是哪一個?

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 中,最左邊的類優(yōu)先。

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

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

6 __invert__ 魔法函數(shù)

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 來創(chuàng)建類

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 個參數(shù)傳遞給 type 以創(chuàng)建我們的類。

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

等價于:

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

責任編輯:武曉燕 來源: Python七號
相關推薦

2016-03-17 09:55:52

HDFSHadoop分布式文件系統(tǒng)

2018-05-23 11:45:32

引擎

2022-05-16 07:48:54

Python操作類型

2015-09-14 11:06:53

PYTHON運維

2024-05-09 15:00:38

Python編碼開發(fā)

2011-05-31 16:56:10

SEO

2015-02-13 10:01:11

微信

2014-07-22 10:02:18

教育CRM

2022-05-23 11:13:02

Python工具

2011-01-04 11:57:49

思科認證

2024-02-21 08:19:54

2019-12-22 06:04:53

IP內網外網

2021-09-22 12:45:47

Python數(shù)據(jù)分析

2023-02-20 15:04:24

開發(fā)API工具

2023-02-21 15:25:33

開發(fā)工具API

2016-01-15 14:48:56

2019-06-27 18:12:14

云存儲企業(yè)云端

2019-06-28 15:12:27

云存儲云計算數(shù)據(jù)

2012-06-06 14:29:16

iOS 6

2019-08-30 12:01:48

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区成人在线 | 国产你懂的在线观看 | 亚洲电影在线播放 | 国产美女一区 | 特黄视频 | 国产午夜av片 | 欧美日韩亚洲一区 | 精品无码三级在线观看视频 | 99日韩 | 国产成人午夜高潮毛片 | 美国a级毛片免费视频 | 亚洲欧美视频一区 | 黄免费看| 亚洲社区在线 | 日韩视频一区二区三区 | 亚洲天天干 | 一区二区三区亚洲 | 91精品久久久久久久久久小网站 | 成人在线观看免费观看 | 国产三级在线观看播放 | 成人一区二区在线 | 久久亚洲国产 | 欧美久久久久久久久 | 精品视频在线免费观看 | 91在线看片 | 欧美成人一区二区三区 | 国产美女精品 | 日韩三级电影一区二区 | 久久中文字幕视频 | 国产高清免费视频 | 精品一区二区在线看 | 黄色网址在线免费播放 | 久久精品欧美一区二区三区不卡 | 黄色毛片免费 | 国产欧美日韩精品一区 | 一级欧美日韩 | 日本欧美在线 | 国产成人免费视频 | 久久成人精品 | 天堂久久天堂综合色 | 日韩一区二区三区在线观看 |