文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python摸爬滚打之day18----

2023-01-30 22:41

关注

1、issubclass(a,b)  ----> 判断a是否是b的子类.

   isinstance(a,b)  ----> 判断a这个对象是否是b类型的(可以向上判断, 即考虑继承关系往父类判断)

   type(a)  ----> 获取到a对象的类型, type是不考虑继承关系的.

 1 class Animal:
 2     pass
 3 class Cat(Animal):
 4     pass
 5 class LanCat(Cat):
 6     pass
 7 
 8 c = Cat()
 9 l = LanCat()
10 print(isinstance(Cat(),Animal))    #  True  判断前者是否是后者的一个对象
11 print(issubclass(Cat,Animal))     #  True  判断cat是不是animal的子类
isinstance

2、区分函数和类的成员方法

  结论: 1, 对象访问的, 就是方法; 类名访问的, 就是函数;

       2, 对于静态方法, 都是函数;

       3, 对于类方法, 都是方法(任何类其实都是type类的对象,即对象访问)

  from types import FunctionType, MethodType

  print( isinstance(xxx, FunctionType) )

  print( isinstance(xxx, MethodType) )

3、反射 

  通过字符串的形式从对象中动态的获取成员.

     hasattr(obj,str) ----> 判断obj中是否有str成员(最常用)

  getattr(obj,str) ----> 从obj中获取str成员(最常用)

  setattr(obj,str,new) ----> 将obj中的str进行重写, 重写内容为new内容

  delattr(obj,str) ----> 删除obj中的str成员

  说明:

    以上操作都是对内存中的文件进行修改的, 并不会影响源代码.

 1 class Base:
 2     base = "父类的"
 3     def chi(self):
 4         print("吃的开心")
 5     def he(self):
 6         print("喝的好撑")
 7 
 8 class Sclass(Base):
 9     son = "子类的"
10     def __init__(self,name):
11         self.name = name
12     def wan(self):
13         print("玩得舒服")
14 p = Sclass("防滑链")
15 
16 print(getattr(p,"name"))
17 print(getattr(p,"son"))
18 print(getattr(Sclass,"son"))
19 print(getattr(p,"base"))
20 print(getattr(Base,"base"))
21 
22 print(getattr(p,"wan"))         # 从对象里找,找到的是wan()方法的内存地址
23 print(getattr(Sclass,"wan"))    # 从类里找,找到的是wan()函数的内存地址.
24 print(getattr(p,"wan")())
25 
26 # 如果想反射到别的.py文件,就必须导入 "import py文件名" ,getattr(py文件名.类名,str)
反射

  反射的另类用法: 通过字符串导入模块(原理不是反射, 只是有步骤用到了反射)

1 path = "字符串导入模块.example.fanshe"      # 模块路径
2 import importlib
3 inp = input("请输入要查看的类别[f1,f2,f3]: ")
4 m = importlib.import_module(path)       # 通过字符串的形式来导入模块
5 if hasattr(m.Cate,inp):     #  m.Cate, 即inp是否在类的成员方法里面, 不能写直接写m, 找不到的
6     obj = m.Cate()          #  创建obj对象
7     print(getattr(obj,inp)())
8 else:
9     print("不存在此类别.")
通过字符串导入模块

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯