<h1 id="面向对象" data-source-line="1">面向对象
<h3 id="面向对象-2" data-source-line="3">面向对象
<ul data-source-line="5">
- 面向过程:数学逻辑的映射,学会做个好员工
- 面向对象:生活逻辑的映射,学会做个好领导
- 类: 人 手机 电脑
- 对象: 我的手机、女朋友的手机 你的那部T400、老板桌上的电脑
- 类:具有相同特征(属性和行为)的事物的抽象
- 对象:某个类的具象
- 类:是一种自定义的数据类型
- 对象:某个类类型的变量
类的定义:
内容
-
语法说明:
-
示例:
方法体现
<span style="color: #008000">#</span><span style="color: #008000"> 吃饭</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> eat(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">红烧排骨我喜欢吃</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #008000">#</span><span style="color: #008000"> 睡觉</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> sleep(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">睡觉也是一种生活态度</span><span style="color: #800000">'</span><span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 定义对象
liang =<span style="color: #000000"> Person()
<span style="color: #008000">#<span style="color: #008000"> 调用方法
<span style="color: #000000">liang.eat()
liang.sleep()
<span style="color: #008000">#<span style="color: #008000"> 属性时动态添加的
liang.name = <span style="color: #800000">'<span style="color: #800000">上官<span style="color: #800000">'
<span style="color: #008000">#<span style="color: #008000"> 获取属性
<span style="color: #0000ff">print(liang.name)
self使用
调用该方法就表示谁
(</span><span style="color: #0000ff">def</span><span style="color: #000000"> introduce(self):
</span><span style="color: #008000">#</span><span style="color: #008000"> 不但可以访问成员<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a></span>
<span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">我叫{}</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.name))
</span><span style="color: #008000">#</span><span style="color: #008000"> 还可以<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>成员<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #000000"> self.run()
fei
=<span style="color: #000000"> Person()
fei.name = <span style="color: #800000">'<span style="color: #800000">欧阳<span style="color: #800000">'<span style="color: #000000">
fei.run()
fei.introduce()
long
=<span style="color: #000000"> Person()
long.name = <span style="color: #800000">'<span style="color: #800000">诸葛<span style="color: #800000">'<span style="color: #000000">
long.introduce()
- 说明:
__str__方法
方法打印对象,默认打印 类名 + 地址
内容,重写该方法即可,要求返回一个字符串
james =<span style="color: #000000"> Person()
james.name = <span style="color: #800000">'<span style="color: #800000">勒布朗.詹姆斯<span style="color: #800000">'<span style="color: #000000">
james.age = 33
<span style="color: #0000ff">print(james)
</span><span style="color: #008000">#</span><span style="color: #008000"> 构造<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>:创建对象后,初始化系统就会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a><a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__init__</span><span style="color: #000000">(self,name,age,color):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__init__</span><span style="color: #800000">'</span><span style="color: #000000">)
self.name </span>=<span style="color: #000000"> name
self.age </span>=<span style="color: #000000"> age
self.color </span>=<span style="color: #000000"> color
<span style="color: #008000">#<span style="color: #008000"> 这种形式比较繁琐<span style="color: #008000">
<span style="color: #008000"> tom = Cat()<span style="color: #008000">
<span style="color: #008000"> tom.name = 'Tom'<span style="color: #008000">
<span style="color: #008000"> tom.age = 3<span style="color: #008000">
<span style="color: #008000"> tom.color = '蓝色'
<span style="color: #008000">#<span style="color: #008000"> 这种比较简洁
tom = Cat(<span style="color: #800000">'<span style="color: #800000">Tom<span style="color: #800000">',3,<span style="color: #800000">'<span style="color: #800000">蓝色<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print(tom)
方法:当对象释放时,系统会自动调用
删除,则会立即调用该方法
方法一般做资源释放处理:数据库连接断开,文件关闭
(bajie =<span style="color: #000000"> Pig()
<span style="color: #0000ff">del<span style="color: #000000"> bajie
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">八戒,一路走好!<span style="color: #800000">')
-
经典示例:小明手里有两张牌,左手♥K,右手♠A,小明交换两手的牌后,手里分别是什么?
<span style="color: #008000">#
<span style="color: #008000"> 扑克牌
<span style="color: #0000ff">class<span style="color: #000000"> Poker:
<span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,color,number):
self.color =<span style="color: #000000"> color
self.number =<span style="color: #000000"> number
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__str__</span><span style="color: #000000">(self):
</span><span style="color: #0000ff">return</span> <span style="color: #800000">'</span><span style="color: #800000">{}{}</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.color,self.number)
<span style="color: #008000">#<span style="color: #008000"> 创建两张牌
p1 = Poker(<span style="color: #800000">'<span style="color: #800000">♥<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">K<span style="color: #800000">'<span style="color: #000000">)
p2 = Poker(<span style="color: #800000">'<span style="color: #800000">♠<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">A<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 手的类
<span style="color: #0000ff">class<span style="color: #000000"> Hand:
<span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,poker):
self.poker =<span style="color: #000000"> poker
</span><span style="color: #0000ff">def</span><span style="color: #000000"> hold_poker(self,poker):
self.poker </span>=<span style="color: #000000"> poker
<span style="color: #008000">#<span style="color: #008000"> 创建左右两只手
left_hand =<span style="color: #000000"> Hand(p1)
right_hand =<span style="color: #000000"> Hand(p2)
<span style="color: #008000">#<span style="color: #008000"> 人的类
<span style="color: #0000ff">class<span style="color: #000000"> Person:
<span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,left_hand,right_hand):
self.name =<span style="color: #000000"> name
self.left_hand =<span style="color: #000000"> left_hand
self.right_hand =<span style="color: #000000"> right_hand
</span><span style="color: #008000">#</span><span style="color: #008000"> 展示手里的牌</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> show(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">{}张开手</span><span style="color: #800000">'</span>.format(self.name),end=<span style="color: #800000">'</span> <span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">左手:{}</span><span style="color: #800000">'</span>.format(self.left_hand.poker),end=<span style="color: #800000">'</span><span style="color: #800000">,</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">右手:{}</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.right_hand.poker))
</span><span style="color: #008000">#</span><span style="color: #008000"> 交换两手的牌</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> swap(self):
self.left_hand.poker,self.right_hand.poker </span>=<span style="color: #000000"> self.right_hand.poker,self.left_hand.poker
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">{}交换两手的牌</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.name))
<span style="color: #008000">#<span style="color: #008000"> 创建小明对象
xiaoming = Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">,right_hand)
<span style="color: #008000">#<span style="color: #008000"> 展示手里的牌
<span style="color: #000000">xiaoming.show()
<span style="color: #008000">#<span style="color: #008000"> 交换两手的牌
<span style="color: #000000">xiaoming.swap()
<span style="color: #008000">#<span style="color: #008000">再次展示
xiaoming.show()
-
函数" data-source-line="238">常用内置函数
-
示例:setattr、getattr、delattr
= </span><span style="color: #0000ff">def</span> <span style="color: #800080">__str__</span><span style="color: #000000">(self):
</span><span style="color: #0000ff">return</span> <span style="color: #800000">'</span><span style="color: #800000">姓名:{}</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.name)
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__del__</span><span style="color: #000000">(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">对象即将销毁</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #008000">#</span><span style="color: #008000"> 当<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>不存在的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__getattr__</span><span style="color: #000000">(self,item):
</span><span style="color: #0000ff">if</span> item == <span style="color: #800000">'</span><span style="color: #800000">age</span><span style="color: #800000">'</span><span style="color: #000000">:
</span><span style="color: #0000ff">return</span> 18
<span style="color: #0000ff">else</span><span style="color: #000000">:
</span><span style="color: #0000ff">return</span> <span style="color: #800000">'</span><span style="color: #800000">你猜</span><span style="color: #800000">'</span>
<span style="color: #008000">#</span><span style="color: #008000"> 当设置不存在的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__setattr__</span><span style="color: #000000">(self,key,value):
</span><span style="color: #0000ff">print</span><span style="color: #000000">(key,value)
self.</span><span style="color: #800080">__dict__</span>[key] =<span style="color: #000000"> value
</span><span style="color: #008000">#</span><span style="color: #008000"> 销毁对象成员<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__delattr__</span><span style="color: #000000">(self,item):
</span><span style="color: #0000ff">print</span>(item,<span style="color: #800000">'</span><span style="color: #800000">即将销毁</span><span style="color: #800000">'</span><span style="color: #000000">)
xiaoming
= Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)
xiaoming.age = 20
<span style="color: #0000ff">print<span style="color: #000000">(xiaoming.age)
<span style="color: #008000">#<span style="color: #008000"> 存放对象的所有属性<span style="color: #008000">
<span style="color: #008000"> print(xiaoming.dict)<span style="color: #008000">
<span style="color: #008000"> print(xiaoming)
<span style="color: #0000ff">del xiaoming.age
方法
self.[key] =</span><span style="color: #008000">#</span><span style="color: #008000"> 将对象当做字典操作,根据键<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>值时会触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__getitem__</span><span style="color: #000000">(self,item):
</span><span style="color: #008000">#</span><span style="color: #008000"> print(item)</span>
<span style="color: #0000ff">return</span> self.<span style="color: #800080">__dict__</span><span style="color: #000000">.get(item)
</span><span style="color: #008000">#</span><span style="color: #008000"> 将对象当做字典操作,<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>指定的键值对时<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发</span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__delitem__</span><span style="color: #000000">(self,key):
</span><span style="color: #0000ff">del</span> self.<span style="color: #800080">__dict__</span><span style="color: #000000">[key]
xiaoming
=<span style="color: #000000"> Person()
xiaoming[
<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">'] = <span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'
<span style="color: #0000ff">print(xiaoming.<span style="color: #800080">dict<span style="color: #000000">)
<span style="color: #0000ff">print(xiaoming[<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">'<span style="color: #000000">])
<span style="color: #0000ff">del xiaoming[<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">']
函数调用时,会自动触发该方法
(self,*args,**
xiaoming =<span style="color: #000000"> Person()
<span style="color: #008000">#<span style="color: #008000"> 这样操作,需要提供call方法
ret = xiaoming(1,2,name=<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print(ret)
函数判断
(self,**
<span style="color: #0000ff">def
<span style="color: #000000"> test():
<span style="color: #0000ff">pass<span style="color: #000000">
a
=<span style="color: #000000"> A()
<span style="color: #008000">#<span style="color: #008000"> 判断是否可调用
<span style="color: #0000ff">print<span style="color: #000000">(callable(test))
<span style="color: #0000ff">print<span style="color: #000000">(callable(a))
<span style="color: #008000">#<span style="color: #008000"> 判断是否拥有'call'属性
<span style="color: #0000ff">print(hasattr(test,<span style="color: #800000">'<span style="color: #800000">call<span style="color: #800000">'<span style="color: #000000">))
<span style="color: #0000ff">print(hasattr(a,<span style="color: #800000">'<span style="color: #800000">call<span style="color: #800000">'<span style="color: #000000">))
<span style="color: #008000">#<span style="color: #008000"> 判断是否是函数
<span style="color: #0000ff">from inspect <span style="color: #0000ff">import<span style="color: #000000"> isfunction
<span style="color: #0000ff">print<span style="color: #000000">(isfunction(test))
<span style="color: #0000ff">print(isfunction(a))
类的定义:
语法说明:
示例:
<span style="color: #008000">#</span><span style="color: #008000"> 吃饭</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> eat(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">红烧排骨我喜欢吃</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #008000">#</span><span style="color: #008000"> 睡觉</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> sleep(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">睡觉也是一种生活态度</span><span style="color: #800000">'</span><span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 定义对象liang =<span style="color: #000000"> Person()
<span style="color: #008000">#<span style="color: #008000"> 调用方法
<span style="color: #000000">liang.eat()
liang.sleep()
<span style="color: #008000">#<span style="color: #008000"> 属性时动态添加的
liang.name = <span style="color: #800000">'<span style="color: #800000">上官<span style="color: #800000">'
<span style="color: #008000">#<span style="color: #008000"> 获取属性
<span style="color: #0000ff">print(liang.name)
self使用
</span><span style="color: #0000ff">def</span><span style="color: #000000"> introduce(self):
</span><span style="color: #008000">#</span><span style="color: #008000"> 不但可以访问成员<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a></span>
<span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">我叫{}</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.name))
</span><span style="color: #008000">#</span><span style="color: #008000"> 还可以<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>成员<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #000000"> self.run()
fei
=<span style="color: #000000"> Person()fei.name = <span style="color: #800000">'<span style="color: #800000">欧阳<span style="color: #800000">'<span style="color: #000000">
fei.run()
fei.introduce()
long
=<span style="color: #000000"> Person()long.name = <span style="color: #800000">'<span style="color: #800000">诸葛<span style="color: #800000">'<span style="color: #000000">
long.introduce()
- 说明:
__str__方法
james.name = <span style="color: #800000">'<span style="color: #800000">勒布朗.詹姆斯<span style="color: #800000">'<span style="color: #000000">
james.age = 33
<span style="color: #0000ff">print(james)
</span><span style="color: #008000">#</span><span style="color: #008000"> 构造<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>:创建对象后,初始化系统就会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a><a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__init__</span><span style="color: #000000">(self,name,age,color):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">__init__</span><span style="color: #800000">'</span><span style="color: #000000">)
self.name </span>=<span style="color: #000000"> name
self.age </span>=<span style="color: #000000"> age
self.color </span>=<span style="color: #000000"> color
<span style="color: #008000">#<span style="color: #008000"> 这种形式比较繁琐<span style="color: #008000">
<span style="color: #008000"> tom = Cat()<span style="color: #008000">
<span style="color: #008000"> tom.name = 'Tom'<span style="color: #008000">
<span style="color: #008000"> tom.age = 3<span style="color: #008000">
<span style="color: #008000"> tom.color = '蓝色'
<span style="color: #008000">#<span style="color: #008000"> 这种比较简洁
tom = Cat(<span style="color: #800000">'<span style="color: #800000">Tom<span style="color: #800000">',3,<span style="color: #800000">'<span style="color: #800000">蓝色<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print(tom)
<span style="color: #0000ff">del<span style="color: #000000"> bajie
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">八戒,一路走好!<span style="color: #800000">')
经典示例:小明手里有两张牌,左手♥K,右手♠A,小明交换两手的牌后,手里分别是什么?
<span style="color: #008000">#
<span style="color: #008000"> 扑克牌<span style="color: #0000ff">class<span style="color: #000000"> Poker:
<span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,color,number):
self.color =<span style="color: #000000"> color
self.number =<span style="color: #000000"> number
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__str__</span><span style="color: #000000">(self):
</span><span style="color: #0000ff">return</span> <span style="color: #800000">'</span><span style="color: #800000">{}{}</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.color,self.number)
<span style="color: #008000">#<span style="color: #008000"> 创建两张牌
p1 = Poker(<span style="color: #800000">'<span style="color: #800000">♥<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">K<span style="color: #800000">'<span style="color: #000000">)
p2 = Poker(<span style="color: #800000">'<span style="color: #800000">♠<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">A<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #008000">#<span style="color: #008000"> 手的类
<span style="color: #0000ff">class<span style="color: #000000"> Hand:
<span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,poker):
self.poker =<span style="color: #000000"> poker
</span><span style="color: #0000ff">def</span><span style="color: #000000"> hold_poker(self,poker):
self.poker </span>=<span style="color: #000000"> poker
<span style="color: #008000">#<span style="color: #008000"> 创建左右两只手
left_hand =<span style="color: #000000"> Hand(p1)
right_hand =<span style="color: #000000"> Hand(p2)
<span style="color: #008000">#<span style="color: #008000"> 人的类
<span style="color: #0000ff">class<span style="color: #000000"> Person:
<span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,left_hand,right_hand):
self.name =<span style="color: #000000"> name
self.left_hand =<span style="color: #000000"> left_hand
self.right_hand =<span style="color: #000000"> right_hand
</span><span style="color: #008000">#</span><span style="color: #008000"> 展示手里的牌</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> show(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">{}张开手</span><span style="color: #800000">'</span>.format(self.name),end=<span style="color: #800000">'</span> <span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">左手:{}</span><span style="color: #800000">'</span>.format(self.left_hand.poker),end=<span style="color: #800000">'</span><span style="color: #800000">,</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">右手:{}</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.right_hand.poker))
</span><span style="color: #008000">#</span><span style="color: #008000"> 交换两手的牌</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> swap(self):
self.left_hand.poker,self.right_hand.poker </span>=<span style="color: #000000"> self.right_hand.poker,self.left_hand.poker
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">{}交换两手的牌</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.name))
<span style="color: #008000">#<span style="color: #008000"> 创建小明对象
xiaoming = Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">,right_hand)
<span style="color: #008000">#<span style="color: #008000"> 展示手里的牌
<span style="color: #000000">xiaoming.show()
<span style="color: #008000">#<span style="color: #008000"> 交换两手的牌
<span style="color: #000000">xiaoming.swap()
<span style="color: #008000">#<span style="color: #008000">再次展示
xiaoming.show()
示例:setattr、getattr、delattr
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__str__</span><span style="color: #000000">(self):
</span><span style="color: #0000ff">return</span> <span style="color: #800000">'</span><span style="color: #800000">姓名:{}</span><span style="color: #800000">'</span><span style="color: #000000">.format(self.name)
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__del__</span><span style="color: #000000">(self):
</span><span style="color: #0000ff">print</span>(<span style="color: #800000">'</span><span style="color: #800000">对象即将销毁</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #008000">#</span><span style="color: #008000"> 当<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>不存在的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__getattr__</span><span style="color: #000000">(self,item):
</span><span style="color: #0000ff">if</span> item == <span style="color: #800000">'</span><span style="color: #800000">age</span><span style="color: #800000">'</span><span style="color: #000000">:
</span><span style="color: #0000ff">return</span> 18
<span style="color: #0000ff">else</span><span style="color: #000000">:
</span><span style="color: #0000ff">return</span> <span style="color: #800000">'</span><span style="color: #800000">你猜</span><span style="color: #800000">'</span>
<span style="color: #008000">#</span><span style="color: #008000"> 当设置不存在的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__setattr__</span><span style="color: #000000">(self,key,value):
</span><span style="color: #0000ff">print</span><span style="color: #000000">(key,value)
self.</span><span style="color: #800080">__dict__</span>[key] =<span style="color: #000000"> value
</span><span style="color: #008000">#</span><span style="color: #008000"> 销毁对象成员<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__delattr__</span><span style="color: #000000">(self,item):
</span><span style="color: #0000ff">print</span>(item,<span style="color: #800000">'</span><span style="color: #800000">即将销毁</span><span style="color: #800000">'</span><span style="color: #000000">)
xiaoming
= Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)xiaoming.age = 20
<span style="color: #0000ff">print<span style="color: #000000">(xiaoming.age)
<span style="color: #008000">#<span style="color: #008000"> 存放对象的所有属性<span style="color: #008000">
<span style="color: #008000"> print(xiaoming.dict)<span style="color: #008000">
<span style="color: #008000"> print(xiaoming)
<span style="color: #0000ff">del xiaoming.age
</span><span style="color: #008000">#</span><span style="color: #008000"> 将对象当做字典操作,根据键<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>值时会触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__getitem__</span><span style="color: #000000">(self,item):
</span><span style="color: #008000">#</span><span style="color: #008000"> print(item)</span>
<span style="color: #0000ff">return</span> self.<span style="color: #800080">__dict__</span><span style="color: #000000">.get(item)
</span><span style="color: #008000">#</span><span style="color: #008000"> 将对象当做字典操作,<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>指定的键值对时<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发</span>
<span style="color: #0000ff">def</span> <span style="color: #800080">__delitem__</span><span style="color: #000000">(self,key):
</span><span style="color: #0000ff">del</span> self.<span style="color: #800080">__dict__</span><span style="color: #000000">[key]
xiaoming
=<span style="color: #000000"> Person()xiaoming[
<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">'] = <span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #0000ff">print(xiaoming.<span style="color: #800080">dict<span style="color: #000000">)
<span style="color: #0000ff">print(xiaoming[<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">'<span style="color: #000000">])
<span style="color: #0000ff">del xiaoming[<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">']
ret = xiaoming(1,2,name=<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print(ret)
函数判断
<span style="color: #0000ff">def
<span style="color: #000000"> test():<span style="color: #0000ff">pass<span style="color: #000000">
a
=<span style="color: #000000"> A() <span style="color: #008000">#<span style="color: #008000"> 判断是否可调用<span style="color: #0000ff">print<span style="color: #000000">(callable(test))
<span style="color: #0000ff">print<span style="color: #000000">(callable(a))
<span style="color: #008000">#<span style="color: #008000"> 判断是否拥有'call'属性
<span style="color: #0000ff">print(hasattr(test,<span style="color: #800000">'<span style="color: #800000">call<span style="color: #800000">'<span style="color: #000000">))
<span style="color: #0000ff">print(hasattr(a,<span style="color: #800000">'<span style="color: #800000">call<span style="color: #800000">'<span style="color: #000000">))
<span style="color: #008000">#<span style="color: #008000"> 判断是否是函数
<span style="color: #0000ff">from inspect <span style="color: #0000ff">import<span style="color: #000000"> isfunction
<span style="color: #0000ff">print<span style="color: #000000">(isfunction(test))
<span style="color: #0000ff">print(isfunction(a))