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

  一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入
    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. PHP实现微信公众平台开发—基础篇

    PHP实现微信公众平台开发—基础篇 2 1课程介绍 2 2. 微信公众号账号介绍的申请流程详解 2 2.1微信三角色关系 2 2.2信息流的过程 2 2.4微信公众账号的认证 3 2.5订阅号的申请流 ...

  2. 调停者模式Mediator(中介者模式)详解

    原文链接:https://www.cnblogs.com/java-my-life/archive/2012/06/20/2554024.html 在阎宏博士的<JAVA与模式>一书中开头 ...

  3. AP_MergeSql

    ) FROM DELTA.PRMCN WHERE ETL_FLAG IN ('A','D')) S; --重跑:删除已跑入数据 DELETE FROM CCRD.PRMCN WHERE JOB_SEQ ...

  4. Windows自动化---模拟鼠标键盘

    1.PyUserInput(不推荐) python2可以使用PyUserInput库:(不推荐) 支持最基础的鼠标,键盘操作,可以剪贴. 安装的时候:pip install PyUserInput 需 ...

  5. Codeforces Round #526 (Div. 2) D. The Fair Nut and the Best Path 树上dp

    D. The Fair Nut and the Best Path 题意:给出一张图 点有权值 边也要权值 从任意点出发到任意点结束 到每个点的时候都可以获得每个点的权值,而从边走的时候都要消耗改边的 ...

  6. Helvetic Coding Contest 2016 online mirror A1

    Description Tonight is brain dinner night and all zombies will gather together to scarf down some de ...

  7. 数据恢复(Data recovery)

    定义数据恢复: 当存储介质出现损伤或由于人员误操作.操作系统故障本身故障所造成的数据不可见,无法读取.丢失. 工程师通过特殊的手段读取却在正常状态下不可见,不可读,无法读的数据. 数据恢复(Data ...

  8. ubuntu下用apt-get安装lamp缺少mcrypt , curl

    用apt-get安装的LAMP环境,但安装magento报没有mcrypt和curl,   解决方法如下: curl安装: sudo apt-get install curl libcurl3 lib ...

  9. mybatis用法

    转载:https://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架 ...

  10. Problem05 判断分数等级

    题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. 程序分析:(a>b)?a:b这是条件运算符的基本例子. impo ...