一.绑定方法与非绑定方法

  一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入
    1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的
    2.绑定给类的方法:为类中定义的函数加上一个装饰器@classmethod

  二.非绑定方法:既不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通的函数,普通函数没有自动传值的效果

  案例如下:

class Foo:
def f1(self):
print(self) @classmethod
def f2(cls):
print(cls) @staticmethod
def f3(a, b):
print('f3', a * b)
import settings
class Mysql:
def __init__(self,ip,port):
self.ip = ip
self.port = port
self.id = self.create_id() def tell_info(self):
print('ip:%s port:%s id:%s'%(self.ip,self.port,self.id)) @classmethod
def from_conf(cls):
return cls(settings.IP,settings.PORT) @staticmethod
def create_id():
import uuid
return uuid.uuid4() obj1 = Mysql.from_conf()
obj2 = Mysql('10.1.183.16',8080)
obj1.tell_info()
obj2.tell_info()

小案例

二.isinstance与issubclass

  isinstance(obj,cls)检查obj是否是类cls的对象

class Foo:
pass obj = Foo()
# 类型判断
print(isinstance(obj,Foo))

  issubclass(sub,super)检查sub类是否是super类的子类

class Foo:
pass
class Bar(Foo):
pass
obj = Foo() # 判断是否子类
print(issubclass(Foo,Bar))

三.反射

  python面向对象中的反射:通过字符串的形式操作对象相关的属性,python中的一切事物都是对象,用字符串取代点(.)对属性的操作

  hasattr(o,name)判断某一个属性是是否存在

  setattr(obj,name,value)给对象一个属性,属性名给name,值为value

  getattr(o,name,default)获得对象name属性的值,不声明default时不存在该属性会报错

  delattr(o,name)删除对象的name属性

class Person:
def __init__(self,name,age):
self.name = name
self.age = age def run(self):
print('%s run'%self.name) obj = Person('Yven',18)
delattr()
print(hasattr(obj,'name'))#'name' in obj.__dict__
print(getattr(obj,'name',None))#obj.__dict__['name']
setattr(obj,'sex','male')#obj.__dict__['sex'] = 'male'
print(obj.sex)
delattr(obj,'sex')
print(obj.__dict__)
setattr(obj,'address','shanghaipudong')
print(obj.address)
print(hasattr(obj,'address'))
delattr(obj,'address')
print(hasattr(obj,'address'))

Python面向对象(三)的更多相关文章

  1. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  2. Python面向对象三要素-封装(Encapsulation)

    Python面向对象三要素-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述 将数据和操作组织到类中,即属性和方法 将数据隐藏起来,给 ...

  3. Python面向对象三要素-多态

    Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...

  4. Python 面向对象三(转载)

    来源:Mr.Seven www.cnblogs.com/wupeiqi/p/4766801.html 四.类的特殊成员 上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段.方法和属性三 ...

  5. python 面向对象三 访问权限 下划线 双下划线

    一.双下划线 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问. ...

  6. python 面向对象(三)类与类之间的关系 初始化方法一些类

    ###################总结################# 面试的时候 让写python一些特殊方法 __init__ 创建对象的时候初始化 __new__对象实例化调用第一个方法 ...

  7. python 面向对象(三)--继承和多态

    在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...

  8. Python 面向对象(三) 魔术方法

    __getitem__ 在对实例或对象使用索引访问时调用,self[key]__dir__ 收集当前模块的信息,包括继承自其它基类(包括object类)的属性和方法 __new 定义如何创建实例__i ...

  9. python面向对象<三>

    类属性.实例属性: class Tool(object): #属性(类属性)类对象(Tool) num = 0 #方法 def __init__(self,new_name): self.name = ...

随机推荐

  1. (转)Jmeter参数化

    设置参数值的方法有如下几种: 1. 用Jmeter中的函数获取参数值,__Random,__threadNum,__CSVRead,__StringFromFile,具体调用方法如下:${__Rand ...

  2. Xcode的编辑利器Xvim,如何去掉烦人工具栏和文件路径

    最近网上看到了一篇关于Xcode的编辑利器,因为以前做FPGA工作时候在ISE SDK下用过vim作为编辑器,所以深知vim的强大,所以安装Xvim: 在安装之后遇到一些配置问题,因为本来就完美控制, ...

  3. 通过div实现arcgis自定义infowindow

    通过给地图绑定缩放,单击和平移命令,实现在地图附加div标签,实现infowindow效果: /* *作者 扰扰 *自定义esri弹窗 *paramter Map地图对象 *paramter x *p ...

  4. libxml2 安装及使用

    https://gitlab.gnome.org/GNOME/libxml2/ ftp://xmlsoft.org/libxml2/libxml2-2.9.1.tar.gz /configuremak ...

  5. python统计字符串中字符个数

    str = "xxx" result = {} for i in set(str):#set将字符串转为集合对象,用于去重,减少计算量 result[i] = str.count( ...

  6. thinkphp 3.0 核心函数U的一个致命bug

    最近在玩thinkphp,感觉内置函数 U 挺强大的! 传递多个参数时,出乱子了(window环境下,xampp) 例如 echo U('Blog/cate',array('cate_id'=> ...

  7. sharepoint_study_6

    描述:SharePoint 2013配置开发环境,需要安装VS2012插件 解决: 参见地址-http://www.java123.net/detail/view-330510.html

  8. Flask&&人工智能AI -- 7 MongoDB

    MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器.“$”的奇妙用法,Array Object的特殊操作,选取跳过排序,客户端操作 一.MongoDB初识 什么是MongoDB Mong ...

  9. day_11 生成器

    . 生成器本身是迭代器 .写迭代器的方式 .生成器函数 .生成器表达式 .各种推导式 .生成器函数 函数内部有yield, yield返回->return yield把函数分段进行 生成器可以使 ...

  10. linux中firewall与iptables防火墙服务

    火墙firewall-cmd --state 查看火墙的状态firewall-cmd --get-active-zones 目前所处的域firewall-cmd --get-default-zone ...