加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python:面向对象进阶

发布时间:2020-12-17 00:01:03 所属栏目:Python 来源:网络整理
导读:1,反射 反射:使用字符串类型的名字去操作变量 反射就没有安全问题,去操作内存中已经存在的变量 ? #反射对象中的属性和方法? =20 (getattr(A, )) #反射对象的属性 ( = = ret =getattr(a,span style="color: #800000"' span style="color: #800000"name spa

1,反射

反射:使用字符串类型的名字去操作变量
反射就没有安全问题,去操作内存中已经存在的变量
?
#反射对象中的属性和方法?
=20 (getattr(A,))

#反射对象的属性

(==ret =getattr(a,<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">')<span style="color: #008000">#<span style="color: #008000">通过变量名的字符串形式取到的值
<span style="color: #0000ff">print
(ret)

#反射对象的方法
ret =getattr(a,

#反射类的方法:

hasattr(A,)()

#反射类的属性?

=20 (getattr(A,))

#反射模块的属性?

(getattr(my,))
#反射自己模块中的变量
(getattr(sys.modules[],],)()

setattr设置/修改变量

  <span style="color: #0000ff">pass<span style="color: #000000">

setattr(A,<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">alex<span style="color: #800000">'<span style="color: #000000">)

<span style="color: #0000ff">print(A,name)

delattr删除变量

delattr(a,)

2,__str__和__repr__

改变对象的字符串显示__str__,__repr__

自定制格式化字符串__format__

== % str(self. =Teacher(,250(>> %r%nezha)
l = [1,2,3,4,5]
== = Classes((py_s9)
(self): == open() a a

#对象后面加括号,触发执行。

#注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

 = 
         k  self.(k,self.= A()()

?3,item系列

?__getitem____setitem____delitem__

===</span><span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__getitem__</span><span style="color: #000000"&gt;(self,item): </span><span style="color: #0000ff"&gt;if</span><span style="color: #000000"&gt; hasattr(self,item): </span><span style="color: #0000ff"&gt;return</span> self.<span style="color: #800080"&gt;__dict__</span><span style="color: #000000"&gt;[item] </span><span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__setitem__</span><span style="color: #000000"&gt;(self,key,value): self.</span><span style="color: #800080"&gt;__dict__</span>[key] =<span style="color: #000000"&gt; value </span><span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__delitem__</span><span style="color: #000000"&gt;(self,key): </span><span style="color: #0000ff"&gt;del</span> self.<span style="color: #800080"&gt;__dict__</span><span style="color: #000000"&gt;[key]

f = Foo(<span style="color: #800000">'<span style="color: #800000">egon<span style="color: #800000">',38,<span style="color: #800000">'<span style="color: #800000">男<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print(f[<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">'<span style="color: #000000">])
f[<span style="color: #800000">'<span style="color: #800000">hobby<span style="color: #800000">'] = <span style="color: #800000">'<span style="color: #800000">男<span style="color: #800000">'
<span style="color: #0000ff">print(f.hobby,f[<span style="color: #800000">'<span style="color: #800000">hobby<span style="color: #800000">'<span style="color: #000000">])
<span style="color: #0000ff">del f.hobby <span style="color: #008000">#<span style="color: #008000"> object 原生支持 delattr
<span style="color: #0000ff">del f[<span style="color: #800000">'<span style="color: #800000">hobby<span style="color: #800000">'] <span style="color: #008000">#<span style="color: #008000"> 通过自己实现的
<span style="color: #0000ff">print(f.<span style="color: #800080">dict)

4,__new__

  __init__ 初始化方法  __new__  构造方法 : 创建一个对象
= 1 ( (cls,*args,**( object.(A,**a1 =<span style="color: #000000"> A()
a2
=<span style="color: #000000"> A()
a3
=<span style="color: #000000"> A()
<span style="color: #0000ff">print
<span style="color: #000000">(a1)
<span style="color: #0000ff">print
<span style="color: #000000">(a2)
<span style="color: #0000ff">print
(a3)

单例模式# 一个类 始终 只有 一个 实例# 当你第一次实例化这个类的时候 就创建一个实例化的对象# 当你之后再来实例化的时候 就用之前创建的对象
= == (cls,** cls. cls. = object. cls.egon = A(<span style="color: #800000">'<span style="color: #800000">egg<span style="color: #800000">',38<span style="color: #000000">)
egon.cloth
= <span style="color: #800000">'
<span style="color: #800000">小花袄
<span style="color: #800000">'
<span style="color: #000000">
nezha
= A(<span style="color: #800000">'
<span style="color: #800000">nazha
<span style="color: #800000">'
,25<span style="color: #000000">)
<span style="color: #0000ff">print
<span style="color: #000000">(nezha)
<span style="color: #0000ff">print
<span style="color: #000000">(egon)
<span style="color: #0000ff">print
<span style="color: #000000">(nezha.name)
<span style="color: #0000ff">print
<span style="color: #000000">(egon.name)
<span style="color: #0000ff">print
(nezha.cloth)

5,__eq__

=</span><span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__eq__</span><span style="color: #000000"&gt;(self,other): </span><span style="color: #0000ff"&gt;if</span> self.<span style="color: #800080"&gt;__dict__</span> == other.<span style="color: #800080"&gt;__dict__</span><span style="color: #000000"&gt;: </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; True </span><span style="color: #0000ff"&gt;else</span><span style="color: #000000"&gt;: </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; False

ob1 = A(<span style="color: #800000">'<span style="color: #800000">egon<span style="color: #800000">'<span style="color: #000000">)
ob2 = A(<span style="color: #800000">'<span style="color: #800000">egg<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print(ob1 == ob2)

#'=='默认比较内存地址

6,__hash__class A:

7,hashlib#提供摘要算法
hashlib md5 =(md5.hexdigest())

1,不管算法多么不同,摘要的功能始终不变

2,对于相同的字符串使用同一个算法进行摘要,得到的值总是不变的

3,使用不同算法对相同的字符串进行摘要,得到的值应该不同

4,不管是用什么算法,hashlib的方式永远不变

# 摘要算法# 密码的密文存储# 文件的一致性验证    # 在下载的时候 检查我们下载的文件和远程服务器上的文件是否一致    # 两台机器上的两个文件 你想检查这两个文件是否相等
= input(= input( line = line.split(=== usr == user md5_pwd ==()

#加盐

hashlib md5 = hashlib.md5(bytes(,encoding= md5.update(b(md5.hexdigest())

#动态加盐

hashlib md5 = hashlib.md5(bytes(,encoding=)+b md5.update(b(md5.hexdigest())

#文件一致性的校验

=

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读