python isinstance和issubclass,区分方法和函数,反射
一.isinstance和issubclass
1.isinstance
class Animal:
def eat(self):
print('刚睡醒吃点儿东西') class Cat(Animal):
def play(self):
print('猫喜欢玩儿') c = Cat() print(isinstance(c, Cat)) # c是一只猫
print(isinstance(c, Animal)) # 向上判断 c是一只动物
2.issubclass
class Animal:
def eat(self):
print('刚睡醒吃点儿东西') class Cat(Animal):
def play(self):
print('猫喜欢玩儿') c = Cat()
print(issubclass(Cat, Animal)) # 判断Cat类是否是Animal类的子类
print(issubclass(Animal, Cat)) # 判断Animal类是否是Cat类的子类
二.区分方法和函数
官方玩法
from types import FunctionType,MethodType # 方法和函数 FunctionType 函数类型 MethodType 方法类型
from collections import Iterable, Iterator # 迭代器 class Person:
def chi(self): # 实例方法
print('我要吃鱼') @classmethod
def he(cls):
print('我是类方法') @staticmethod
def pi():
print('你是真的皮') p =Person() print(isinstance(Person.chi, FunctionType)) # True
print(isinstance(p.chi, MethodType)) # True print(isinstance(p.he, MethodType)) # True
print(isinstance(Person.he, MethodType)) # True print(isinstance(p.pi, FunctionType)) # True
print(isinstance(Person.pi, FunctionType)) # True
野路子
打印的结果中包含了function. 函数
method. 方法
def func():
print('我是函数') class Foo:
def chi(self):
print('我是吃') print(func) #<function func at 0x0000024817BF1E18>
f = Foo()
f.chi()
print(f.chi) # <bound method Foo.chi of <__main__.Foo object at 0x0000024817DCC358>>
三.反射
class Preson:
def __init__(self, name, laopo):
self.name = name
self.laopo = laopo p = Preson('宝宝', '林志玲') print(hasattr(p, 'laopo')) # p这个对象中是否有老婆这个属性
print(getattr(p, 'laopo')) # p.laopo 获取p这个对象中的老婆属性 # 设置一个对象属性若存在就修改 不存在就添加到这个对象中
setattr(p, 'laopo', '胡一菲') # p.laopo = 胡一菲
setattr(p, 'money', 10000000) # p.money = 10000000 print(p.laopo)
print(p.money) # delattr(p, 'laopo') # 把对象中的xxx属性移除 != p.laopo = None
print(p.laopo) #'Preson' object has no attribute 'laopo' 已经移除了对象中的laopo属性所以报错
python isinstance和issubclass,区分方法和函数,反射的更多相关文章
- Python 区分方法和函数
def func(): print("我是函数") class Foo: def chi(self): print("我是吃") # print(func) # ...
- day 25 方法和函数 反射
特殊成员的补充: # __str__ class Foo(object): def __init__(self): pass def func(self): pass def __str__(self ...
- isinstance,issubclass,内置函数__str__和__repr__,__format__,dir()函数
isinstance(obj,cls) 检查是否obj是否是类 cls 的对象 #对象与类之间的关系 判断第一个参数是否是第二个参数的实例 # 身份运算 # 2 == 3 # 值是否相等# 2 is ...
- day26 Python isinstance和issubclass
isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo(object) ...
- Python学习笔记——常用的内置函数
一.yield def EricReadlines(): seek = 0 while True: with open('D:/temp.txt','r') as f: f.seek(seek) da ...
- python字符串内容替换的方法(转载)
python字符串内容替换的方法 时间:2016-03-10 06:30:46来源:网络 导读:python字符串内容替换的方法,包括单个字符替换,使用re正则匹配进行字符串模式查找与替换的方法. ...
- python基础之 反射,md5加密 以及isinstance, type, issubclass内置方法的运用
内容梗概: 1. isinstance, type, issubclass 2. 区分函数和方法 3. 反射(重点) 4. md5加密 1. isinstance, type, issubclass1 ...
- python基础语法17 面向对象4 多态,抽象类,鸭子类型,绑定方法classmethod与staticmethod,isinstance与issubclass,反射
多态 1.什么是多态? 多态指的是同一种类型的事物,不同的形态. 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字). 多 ...
- 方法和函数,isinstance/issubclass/type以及反射
一丶,isinstance/issubclass/type 1.issubclass检查第一个参数是否是第二个参数的 子子孙孙类 class Foo(): pass class Boo(Foo): p ...
随机推荐
- [Array]1. Two Sum(map和unorder_map)
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- 【python之路43】tornado的用法(一)
一.tonado的代码 1.返回字符串 #!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornad ...
- JS引擎查找属性的原理
原型继承的原理 不断向上查找 funciton getProperty(obj,prop){ if(obj.hasOwnProperty(prop){ return obj[prop]; }else ...
- PHP搜索优化 sphinx 实战
环境:win7 64 wamp 解压sphinx安装包后,简历如下结构.注意,conf目录是我的配置文件目录 在conf目录下,简历newdefend.conf文件,配置内容如下 # 配置数据源 so ...
- Crontab 入门
参考网址: http://www.centoscn.com/CentOS/help/2014/0820/3524.html 简单命令 service crond restart //重启crontab ...
- 在 IE 选项那提示 ”某些设置由系统管理员进行管理” 解决
运行 regedit 打开注册表 修改注册表值HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Interne ...
- Markdown图片
- 根据网站运行日志猜测的百度蜘蛛ip
da大部分文章都是吵来吵去,不准确 所以就不参考那些沙雕的文章了,直接自己统计一个 123.125.71.117 123.125.71.58 220.181.108.115 220.181.108.1 ...
- rabbitmq启用和禁用web界面管理插件
rabbitmq默认安装启动以后,是没有开启web管理界面的,通过rabbitmq-plugins list命令可列出插件的启用和禁用状态. 使用rabbitmq-plugins enable xxx ...
- 初探element+vue+vue-router
基本步骤先准备好 npm install -g vue-cli npm init webpack cnpm i element-ui -S 修改/src/main.js // The Vue buil ...