23 面向对象
      -----特殊方法
1. isinstance(obj,类名)     判断对象是否是此类实例化或者此类的子类实例化出来的
class A:pass
class B(A):pass
b1=B()
print(isinstance(b1,B)) # True
print(isinstance(b1,A)) # True
2.issubclass(类名,类名1) 判断类名是否是类名1的子类
class A:pass
class B(A):pass
print(issubclass(B,A)) #True
print(issubclass(A,B)) #False
3.__len__用法
class C:
def __init__(self):
self.a=1
self.b=2
def __len__(self):
return len(self.__dict__)
c1=C()
print(len(c1))
4.__hash__用法
class C:
def __init__(self):
self.a=1
self.b=2
def __hash__(self):
return hash(str(self.a)+str(self.b))
c1=C()
print(hash(c1))
5.__str__用法 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
class B:
def __init__(self,name,age):
self.name=name
self.age=age
def __repr__(self):
return "太白"
b2=B("alex1",1000)
print(b2)
print("%s"% b2) 6.__repr__用法 如果一个类中定义了__repr__方法,那么在repr(对象) 时,默认输出该方法的返回值
class B:
def __init__(self,name,age):
self.name=name
self.age=age
def __repr__(self):
print("666")
return "太白"
b1=B("alex",1000)
print(repr(b1)) # 方法一
print("%r"% b1) # 方法二
#补充知识:格式化输出
# %s 数字和字符串 %r +"" repr 原形毕露 %d 数字 %f 小数
7.__call__用法 构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,
即:对象() 或者 类()()
class Foo:
def __init__(self):
pass
def __call__(self,*args,**kwargs):
print(args,kwargs)
a1=Foo()
a1("alex",a=666) #('alex',) {'a': 666} 8.__eq__用法 对一个类实例化的两个对象进行比较运算的时候自动触发.
class A:
def __init__(self,):
self.a=1
self.b=2
def __eq__(self,obj): # 需要手动传一个参数
if self.a==obj.a and self.b==obj.b:
return True
a1=A()
b1=A()
print(a1==b1)
9.__del__用法 析构方法
#python垃圾回收机制:
#文件中你创建的所有的变量,类等等,执行过程中将所有变量,类做个标记,执行完之后,在一段时间之内,没有被调用,则会自动回收.
class A:
def __del__(self):
print("666")
a1=A()
a1.__del__ 10.__new__用法
class A:
def __init__(self):
self.x=1
print("in init function") # 第五步
def __new__(cls,*args,**kwargs): # 第二步 自动执行__new__方法
print(cls) # 第三步<class '__main__.A'>
print("in new function") # 第四步 return super().__new__(cls) # 返回一个对象空间
return object.__new__(cls) 第二种方法
a1=A() # 第一步 类名加括号
11.设计模式:
单例模式: 对一个类只能实例化一个对象.最简单的设计模式, (面试必考)
class A:
__instance=None
def __new__(cls, *argsm, **kwargs):
if A.__instance is None:
obj=object.__new__(cls)
A.__instance=obj
return A.__instance
a1=A()
b1=A()
c1=A()
print(a1,b1,c1)
12.item 用法
class Foo:
def __init__(self,name):
self.name=name
def __getitem__(self,item):
if hasattr(self,item):
return getattr(self,item)
else:
print("没有此变量")
def __setitem__(self,key,value):
print(key,value)
def __delitem__(self,key):
print(key) f1=Foo("alex")
print(f1["name"])
f1["name"]="mary"
del f1["name"] 补充知识点:
 python3.6版本以上,运行以上代码。字符串格式化的另一种写法。
a = '123'
b = f"6666{a}"
												

python全栈开发 * 23 面向对象 知识点汇总 * 180704的更多相关文章

  1. python全栈开发 * 22 面向对象 知识点汇总 * 180703

    22 面向对象 -----属性,类方法,静态方法,反射一.属性1.属性的定义:将方法伪装成属性,虽然在代码层面上没有任何高深之处,但让其看起来更合理. (类似于属性的方法)class Person: ...

  2. python全栈开发 * 19 面向对象 知识点汇总 * 180701

    19 面向对象初识2 一.类的名称空间1.对象的名称空间对象的名称空间中有类对象指针,对象可以通过"类对象指针"找类中的"静态变量"(静态字段),也可以用对象找 ...

  3. python全栈开发 * 18 面向对象知识点汇总 * 180530

    18 面向对象初识1class person: level="高级动物" mind="有思想" def __init__(self,name,age,gent, ...

  4. python全栈开发 * 20 继承知识点汇总 * 180530

    20 面向对象的三大特征之一(继承,多态,封装) -----继承 1.继承的定义: 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类;父类又可称为基类或超类,新建的类称为派生 ...

  5. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  6. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  7. Python 全栈开发七 面向对象

    一.编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式 ...

  8. 巨蟒python全栈开发django9:一些知识点的汇总

    回顾上周内容: 题目: 1.人民出版社出版过的所有书籍的名字以及作者的姓名(三种写法,笔记中有两种写法) 2.手机以2开头的作者出版过的所有书籍名称以及出版社名称(三种写法,笔记中有1种写法) 1.聚 ...

  9. python全栈开发day21面向对象初识总结

随机推荐

  1. 多个组件联合打印输出——PrintableComponentLink

    DevExpress强大到难以想象,其很多组件.接口.自定义事件可完成较好的效果,可节省不少事.如下图所示,用的两个ChartControl.一个GridControl制作的平断面示意图,里面涉及不少 ...

  2. UseSwagger

    if [ "$UseSwagger" != "true" ]; then sed -i "s/\"UseSwagger\": tr ...

  3. Hibernate 离线对象构建通用查询

    1.业务场景 当下主系统衍生子业务系统已经成为常态,像京东的物流和金融,阿里的支付宝和淘宝. 子业务系统需要对主系统的资源进行访问,这里的资源我具体化为数据库数据,但日常业务中可能不只是数据. 抽象服 ...

  4. 洛谷P1048 采药

    题目OJ地址 https://www.luogu.org/problemnew/show/P1048 https://vijos.org/p/1104 题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世 ...

  5. phpBB3导入用户的Python脚本

    关联的数据表 在phpBB3中导入用户时, 需要处理的有两张表, 一个是 users, 一个是 user_group. 如果是新安装的论坛, 在每次导入之前, 用以下语句初始化: DELETE FRO ...

  6. 使用 GeoIP2 获取 IP 的地理位置

    1. 准备工作 数据库 : 解析 IP 地理位置的的数据库来自 GeoLite2 开源数据库:https://dev.maxmind.com/geoip/geoip2/geolite2/ . C 语言 ...

  7. xcode10 改动

    xcode10 开发环境 比  之前有了稍微的变动 1. 代码块 界面控件   图片资源等 的查看位置发生了变化 之前的开发环境  代码块  统一放在 右侧栏的下方的几个选项中 现在 统一放到了上方 ...

  8. fiddler 对https支持

    https://www.cnblogs.com/joshua317/p/8670923.html 测试可行

  9. Oracle sql 统计

    1.按小时统计数量 SELECT TO_CHAR(RECEIVE_TIME,'HH24') HOUR ,COUNT(*) N FROM PH_PRESCRIPTION P WHERE TO_CHAR( ...

  10. RSA/SHA1加密和数字签名算法在开放平台中的应用

    加密算法 加密算法分为两大类:1.对称加密算法:2.非对称加密算法.   密钥个数 加密 解密 对称加密 一个 使用密钥加密 使用同一个密钥解密 非对称加密 两个,公钥和私钥 使用其中一把密钥加密 使 ...