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

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

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

  案例如下:

  1. class Foo:
  2. def f1(self):
  3. print(self)
  4.  
  5. @classmethod
  6. def f2(cls):
  7. print(cls)
  8.  
  9. @staticmethod
  10. def f3(a, b):
  11. print('f3', a * b)
  1. import settings
  2. class Mysql:
  3. def __init__(self,ip,port):
  4. self.ip = ip
  5. self.port = port
  6. self.id = self.create_id()
  7.  
  8. def tell_info(self):
  9. print('ip:%s port:%s id:%s'%(self.ip,self.port,self.id))
  10.  
  11. @classmethod
  12. def from_conf(cls):
  13. return cls(settings.IP,settings.PORT)
  14.  
  15. @staticmethod
  16. def create_id():
  17. import uuid
  18. return uuid.uuid4()
  19.  
  20. obj1 = Mysql.from_conf()
  21. obj2 = Mysql('10.1.183.16',8080)
  22. obj1.tell_info()
  23. obj2.tell_info()

小案例

二.isinstance与issubclass

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

  1. class Foo:
  2. pass
  3.  
  4. obj = Foo()
  5. # 类型判断
  6. print(isinstance(obj,Foo))

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

  1. class Foo:
  2. pass
  3. class Bar(Foo):
  4. pass
  5. obj = Foo()
  6.  
  7. # 判断是否子类
  8. 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属性

  1. class Person:
  2. def __init__(self,name,age):
  3. self.name = name
  4. self.age = age
  5.  
  6. def run(self):
  7. print('%s run'%self.name)
  8.  
  9. obj = Person('Yven',18)
  10. delattr()
  11. print(hasattr(obj,'name'))#'name' in obj.__dict__
  12. print(getattr(obj,'name',None))#obj.__dict__['name']
  13. setattr(obj,'sex','male')#obj.__dict__['sex'] = 'male'
  14. print(obj.sex)
  15. delattr(obj,'sex')
  16. print(obj.__dict__)
  17. setattr(obj,'address','shanghaipudong')
  18. print(obj.address)
  19. print(hasattr(obj,'address'))
  20. delattr(obj,'address')
  21. 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. flink学习笔记-快速生成Flink项目

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  2. P1742 最小圆覆盖

    \(\color{#0066ff}{题目描述}\) 给出N个点,让你画一个最小的包含所有点的圆. \(\color{#0066ff}{输入格式}\) 先给出点的个数N,2<=N<=1000 ...

  3. C++基础学习1: C++布尔类型

    布尔类型(bool)是C++新增的一种基本数据类型.在标准的C语言中并未定义bool类型,如果需要使用bool类型, 程序员可以通过宏定义来自定义一个bool类型,定义语句如下: #define bo ...

  4. P1445 [Violet]樱花

    传送门 看到题目就要开始愉快地推式子 原式 $\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}$ $\rightarrow \frac{x+y}{xy}=\frac{1}{n! ...

  5. hdu-2036求任意多边形面积

    改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  6. JavaScript trim 实现去除字符串首尾指定字符的简单方法

    String.prototype.trim = function (char, type) { if (char) { if (type == 'left') { return this.replac ...

  7. @AutoConfigureAfter不生效 @Configration bean的创建顺序

    https://gooroo.io/GoorooTHINK/Article/17466/Lessons-Learned-Writing-Spring-Boot-Auto-Configurations/ ...

  8. py---------常用模块2

    一.hashilb 模块 python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固 ...

  9. 转 python中%s与%d

    https://blog.csdn.net/SuperCreators/article/details/81393977 pythn print格式化输出. %r 用来做 debug 比较好,因为它会 ...

  10. Vue在单独引入js文件中使用ElementUI的组件

    Vue在单独引入js文件中使用ElementUI的组件 问题场景: 我想在vue中的js文件中使用elementUI中的组件,因为我在main.js中引入了element包和它的css,并挂载到了全局 ...