专栏首页python3python isinstance和is

python isinstance和is

一.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

 1 class Animal:
 2     def eat(self):
 3         print('刚睡醒吃点儿东西')
 4 
 5 
 6 class Cat(Animal):
 7     def play(self):
 8         print('猫喜欢玩儿')
 9 
10 c = Cat()
11 print(issubclass(Cat, Animal))  # 判断Cat类是否是Animal类的子类
12 print(issubclass(Animal, Cat))  # 判断Animal类是否是Cat类的子类

二.区分方法和函数

官方玩法

 1 from types import FunctionType,MethodType  # 方法和函数  FunctionType 函数类型 MethodType 方法类型
 2 from collections import Iterable, Iterator  # 迭代器
 3 
 4 
 5 class Person:
 6     def chi(self):  # 实例方法
 7         print('我要吃鱼')
 8 
 9     @classmethod
10     def he(cls):
11         print('我是类方法')
12 
13     @staticmethod
14     def pi():
15         print('你是真的皮')
16 
17 p =Person()
18 
19 print(isinstance(Person.chi, FunctionType)) # True
20 print(isinstance(p.chi, MethodType)) # True
21 
22 print(isinstance(p.he, MethodType)) # True
23 print(isinstance(Person.he, MethodType)) # True
24 
25 print(isinstance(p.pi, FunctionType)) # True
26 print(isinstance(Person.pi, FunctionType)) # True

野路子

打印的结果中包含了function. 函数
                 method. 方法
 1 def func():
 2     print('我是函数')
 3 
 4 class Foo:
 5     def chi(self):
 6         print('我是吃')
 7 
 8 print(func)  #<function func at 0x0000024817BF1E18>
 9 f = Foo()
10 f.chi()
11 print(f.chi)  # <bound method Foo.chi of <__main__.Foo object at 0x0000024817DCC358>>

三.反射

 1 class Preson:
 2     def __init__(self, name, laopo):
 3         self.name = name
 4         self.laopo = laopo
 5 
 6 
 7 p = Preson('宝宝', '林志玲')
 8 
 9 print(hasattr(p, 'laopo'))  # p这个对象中是否有老婆这个属性
10 print(getattr(p, 'laopo'))  # p.laopo 获取p这个对象中的老婆属性
11 
12 # 设置一个对象属性若存在就修改 不存在就添加到这个对象中
13 setattr(p, 'laopo', '胡一菲')  # p.laopo = 胡一菲
14 setattr(p, 'money', 10000000)  # p.money = 10000000
15 
16 print(p.laopo)
17 print(p.money)
18 
19 # delattr(p, 'laopo')  # 把对象中的xxx属性移除   != p.laopo = None
20 print(p.laopo)  #'Preson' object has no attribute 'laopo' 已经移除了对象中的laopo属性所以报错

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • day17-python之文件操作

    py3study
  • python学习(day4)

    py3study
  • python --日期输出学习

    py3study
  • 30 个 Python 代码小片段

    阅读别人的代码也是提高编程能力的一个有效方式。以下是整理的一些“常用”代码片段,分享给大家。

    Crossin先生
  • [编程经验] Python 字符串的几种判断方法

    Python处理字符串类型功能真的是很强大,遇到了一些我没用过的方法,感觉挺好用的,就写在这里,供大家参考。 s.isalnum() 所有字符都是数字或...

    用户1622570
  • Python3 内置函数

    str1 = 'I love you' print(str1[:6]) # I love str2 = str1[:2] + 'very ' + str1...

    echobingo
  • python内置函数

    Wyc
  • Python_基础_01

    定义编码:只要符合coding[:=]\s*([-\w.]+)即可。如 #coding= utf-8 # -*- coding: utf-8 -*-

    py3study
  • python学习(day4)

    py3study
  • python 文件

    #写进文件 myfile = open('myfile.txt', 'w') myfile.write('hello textfile\n') myfile.w...

    py3study

扫码关注云+社区

领取腾讯云代金券