PYTHON-绑定方法 反射 内置函数
'''
绑定方法
类中定义函数分为了两大类:
1. 绑定方法
特殊之处: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入
如何用:
绑定给对象的方法: 在类中定义函数没有被任何装饰器修饰的情况下,默认就是绑定对象的
绑定给类的方法: 为类中定义函数添加一个装饰器classmethod,就是绑定类的 2. 非绑定方法
特殊之处: 非绑定方法就是一个普通函数,既不与类绑定又不与对象绑定,
意味着类与对象都可以调用,但是无论谁来调用都是一个普通函数,没有自动传值效果
如何用:
非绑定方法: 为类中定义函数添加一个装饰器staticmethod,就是非绑定方法 三种方法使用:关键是看函数体的代码具体使用情况
import uuid
print(uuid.uuid4()) #一.绑定给对象的方法
# 绑定给对象的,应该由对象来调,
# obj.func1()
# print(obj)
# 绑定给对象的方法,类也可以调用,但是类调用就是一个普通函数,没有自动传值的效果
# print(obj.func1)
# print(Foo.func1)
# Foo.func1(obj) #二.绑定给类的方法
# 绑定给类的,应该由类来调,(如用对象来调用,自动传的还是类)
# print(Foo.func2)
# print(obj.func2)
# Foo.func2()
# obj.func2() #三.非绑定方法
# print(obj.func3)
# print(Foo.func3)
# obj.func3(1,2)
# Foo.func3(1,3)
'''
'''
# class Foo:
# def func1(self):
# print('func1',self)
#
# @classmethod
# def func2(cls):
# print('func2',cls)
#
# @staticmethod
# def func3(x,y):
# print('func3',x,y)
#
# obj=Foo()
# ==========================
# import settings
#
# class MySQL:
# def __init__(self,ip,port):
# self.id=self.create_id()
# self.ip=ip
# self.port=port
#
# def tell_info(self):
# print('<%s:%s:%s>' % (self.id,self.ip, self.port))
#
# @classmethod
# def from_conf(cls):
# return cls(settings.IP, settings.PORT)
#
# @staticmethod
# def create_id():
# import uuid
# return uuid.uuid4() # obj=MySQL('1.1.1.1',3306)
# obj1=MySQL('1.1.1.2',3406)
# obj.tell_info()
# obj1.tell_info() # obj2=MySQL.from_conf()
# obj2.tell_info() ''' '''
反射
通过字符串的形式操作对象相关的属性。
python中的一切事物都是对象(都可以使用反射) 总之反射的好处就是,
可以事先定义好接口,接口只有在被完成后才会真正执行,这实现了即插即用,
这其实是一种‘后期绑定’,什么意思?
即你可以事先把主要的逻辑写好(只定义接口),然后后期再去实现接口的功能 四个可以实现自省的函数
下列方法适用于类和对象(一切皆对象,类本身也是一个对象)
#hasattr 判断属性或功能是否存在
# print(hasattr(obj,'name')) #obj.name
# print(hasattr(obj,'tell_info')) #obj.tell_info #getattr 查询属性,None的位置是填默认值
# res=getattr(obj,'name') #res=obj.name
# res=getattr(obj,'xxx',None) #setattr 更改,新增
# setattr(obj,'age',38)
# setattr(obj,'sex','male') #delattr 删除
# delattr(obj,'name')
'''
'''
# class Foo:
# def __init__(self,name,age):
# self.name=name
# self.age=age
#
# def tell_info(self):
# print('%s:%s' %(self.name,self.age))
#
# obj=Foo('egon练习',18) #hasattr
# print(hasattr(obj,'name')) #obj.name
# print(hasattr(obj,'tell_info')) #obj.tell_info #getattr
# res=getattr(obj,'name') #res=obj.name
# print(res)
# res=getattr(obj,'xxx',None)
# print(res) #setattr
# setattr(obj,'age',38)
# setattr(obj,'sex','male')
# print(obj.__dict__)
# print(obj.sex) #delattr
# delattr(obj,'name')
# if hasattr(obj,'xxxxe'):
# delattr(obj,'xxxxe')
# print(obj.__dict__)
''' # isinstance(obj,cls)检查是否obj是否是类 cls 的对象
# issubclass(sub, super)判断是否是子类(检查sub类是否是 super 类的派生类)
'''
# isinstance(obj,cls)检查是否obj是否是类 cls 的对象
# print(isinstance([],list)) #type([]) is list
# class Foo:
# pass
# obj=Foo()
# print(isinstance(obj,Foo)) # issubclass(sub, super)判断是否是子类(检查sub类是否是 super 类的派生类)
# class Foo:
# pass
#
# class Bar(Foo):
# pass
# print(issubclass(Bar,Foo))
''' # __str__: 会在对象被打印时自动触发,然后将返回值返回给print功能进行打印
# l=list([1,2,3])
# print(l) #(同理,定制对象的显示效果,常用!!!) # __del__: 会在对象被删除时自动触发执行,用来在对象被删除前回收系统资源
# 常用语回收 文件的关闭
'''
# __str__: 会在对象被打印时自动触发,然后将返回值返回给print功能进行打印
# class People:
# def __init__(self,name,age):
# self.name=name
# self.age=age
#
# def __str__(self):
# return '<%s:%s>' %(self.name,self.age)
#
# peo=People('egon练习',18)
# print(peo) #print(peo.__str__())
#
# l=list([1,2,3])
# print(l) # __del__: 会在对象被删除时自动触发执行,用来在对象被删除前回收系统资源
# class Foo:
# def __del__(self):
# print('===>')
#
# obj=Foo()
# # del obj
# print('其他代码...') # class Bar:
# def __init__(self,x,y,filepath):
# self.x=x
# self.y=y
# self.f=open(filepath,'r',encoding='utf-8')
# def __del__(self):
# # 写回收系统资源相关的代码
# self.f.close()
#
# obj=Bar(10,20)
# del obj
''' # =================================(后期)
# 四 二次加工标准类型(包装)
# 六 描述符(__get__,__set__,__delete__)
# 熟透对象后再看这两块知识:
# http://www.cnblogs.com/linhaifeng/articles/6204014.html
PYTHON-绑定方法 反射 内置函数的更多相关文章
- Python 面向对象 (补充) , 反射 , 内置函数
面向对象中内置函数 issubclass方法: 检查第一个参数是否是第二个参数的子子孙孙类 返回 : 是一个布尔值 class Base(object): pass class Foo( ...
- python字符串——"奇葩“的内置函数
一.前言 python编程语言里的字符串与我们初期所学的c语言内的字符串还是有一定不同的,比如python字符串里的内置函数就比语言的要多得多:字符串内的书写格式也会有一点差异,例:字符串内含有引 ...
- python 类(object)的内置函数
python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...
- Python标准库:内置函数hasattr(object, name)
Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...
- python基础之反射内置方法元类
补充内置函数 isinstance(obj,Foo) # 判断obj是不是foo的实例 issubclass() # 判断一个类是不是另一个类的子类 反射 什么是反射? 通过字符串来操作 ...
- python中的 dir()内置函数的作用以及使用方法
dir() 内置函数的作用 python 内置方法有很多,无论是初学者还是精通python 的程序员都不能全部即住所有的方法,这时候 dir() 方法就非常有用了,使用 dir()函数可以查看对象内的 ...
- 第8.17节 Python __repr__方法和__str__方法、内置函数repr和str的异同点对比剖析
一. 引言 记得刚开始学习Python学习字符串相关内容的时候,查了很多资料,也做了些测试,对repr和str这两个函数的返回值老猿一直没有真正理解,因为测试发现这两个函数基本上输出时一样的.到现在老 ...
- python---issubclass/type/isinstance/ 反射(内置函数getattr/delattr...)
# 一 python面向对象-内置函数(issubclass(), type(), isinstance()) # issubclass 判断xxxx类是否是xxxx类的子类 class egg: p ...
- Python学习日记(十一) 内置函数
什么是内置函数? 就是Python中已经写好了的函数,可以直接使用 内置函数图表: 以3.6.2为例 内置函数分类: 一.反射相关 1.hasattr() 2.getattr() 3.setattr( ...
随机推荐
- Log4j 2X 日志文件路径问题
关于路径问题网上说啥的都有,但是也不能说人家错,只能说不适合你这个. 一开始,我用的 ${webapp.root} <RollingFile name="rollingFileSy ...
- DOM表格操作
注意:就算代码中不包含<tbody>标签,浏览器解析时也可能会自动添加,因此需要注意子元素的选择 表格操作用到的属性: 1.tHead 2.tBodies 3.tFoot 更为细致的有: ...
- JS模板引擎handlebars.js的简单使用
handlebars.js的使用 首先我们要明白handlebars.js是干什么用的,我们知道使用jsp很麻烦, 于是我们开始使用freemarker等模板引擎,但这个只是针对服务器端来解 析的,那 ...
- 【Maven】安装配置、目录结构、配置文件、常见命令
1.下载配置maven步骤 a.windows下配置jdk的系统环境变量:java_home b.windows下配置maven的系统环境变量:maven_home或者m2_home c.window ...
- 条理清晰的搭建SSH环境之添加所需jar包
一.首先介绍要添加框架环境: JUnit Struts2 Hibernate Spring (1)配置JUnit /**-------------------------添加JUnit-------- ...
- python---ORM之SQLAlchemy(1)
定义一个类,ORM(对象关系映射)将这个类转换为sql语句,使用pymysql进行执行 一,底层处理 使用engine/connectionpooling/dialect进行数据库操作,engine使 ...
- 转--python 黑魔法2
Python 高效编程小技巧 个人博客:临风|刀背藏身 Python 一直被我拿来写算法题,小程序,因为他使用起来太方便了,各种niubi闪闪的技能点也在写算法的过程中逐渐被挖掘到,感谢万能的谷哥度娘 ...
- html5 实时监听输入框值变化的完美方案:oninput & onpropertychange
结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. H5手机端: <input type="text" ...
- golang error信息转字符串 x := fmt.Sprintf("%s", err)
_, _, ch, err := m.ZkConn.ChildrenW(node) if err != nil { x := fmt.Sprintf("%s", err) if s ...
- 单选按钮QRadioButton
继承 QAbstractButton import sys from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QApplicat ...