python_day21面向对象的进阶(反射,内置方法,)
# 两个内置函数 *# 反射 *****# 内置方法 *** # 类(定义) # 静态属性 类属性(变量) 直接写在类中,全大写 # 动态属性 方法(函数) self # 类方法 @classmethod cls # 静态方法 @staticmethod 没有默认参数 # 选课系统 专门给面向对象编程的时候 的函数准备的 # 特性 @property# class Person:# @staticmethod# def login():# pass# class Teacher(Person):# pass # 调用 # 对象名.动态属性()/类名.动态属性(对象) # 类名.静态属性/对象名.静态属性 # 类名.类方法()/对象名.类方法() # 类名.静态方法/对象名.静态方法() # 对象的命名空间中能存的: # 属性# 对象能调用的: # 对象属性 # 类中的普通方法 # 私有的 # __名字 # 静态属性 # 动态属性 # 类方法 # 静态方法 # 属性 # 私有的有什么特点 # 只能在类的内部调用 # 不能被继承 # 什么时候用私有的? # 当不想被外部调用也不想被继承,只想在类内部使用的时候 # 当在外部使用的时候,想给用户的使用前\后直接加上某些功能 # 私有 + property使用 # 3w1h# what 这个东西是什么# where 在哪儿用# why 为什么这么用# how 怎么用 -----------------------------------------------内置函数--------------------------------------
# isinstance() 判断对象所属类型,包括继承关系# issubclass() 判断类与类之间的继承关系 # class A:pass# class B(A):pass# b = B()# print(isinstance(b,B)) #o,t# print(isinstance(b,A)) #o,t# l = list()# print(l) # type(l)# class mystr(str):pass# ms = mystr('alex')# print(ms)# print(type(ms) is str) # 不包含继承关系,只管一层# print(isinstance('alex',str)) # 包含所有的继承关系 # == 值相等 值运算# is 内存地址相等 身份运算# is要求更苛刻 # 不仅要求值相等,还要求内存地址相同 # a = 1111# b = 1111# a == b# a is b # issubclass# class A:pass# class B(A):pass# print(issubclass(B,A))# print(issubclass(A,B)) ---------------------------------------------反射------------------------------------------------------------
# 什么是反射?# 用字符串数据类型的变量名来访问这个变量的值# 反射的方法: getattr hasattr setattr delattr # class Student:# def __init__(self,name):# self.name = name# def check_course(self):# print('check_course')# def choose_course(self):# print('choose_course')# def choosed_course(self):# print('查看已选择的课程')# stu = Student()# num = input('>>>')# if num == 'check_course':# stu.check_course()# elif num == 'choose_course':# stu.choose_course()# elif num == 'choosed_course':# stu.choosed_course() # eval 这个东西 明确的写在你的代码里 # 类 静态属性 类方法 静态方法# 命名空间.XXX == getattr(命名空间,'XXX')# class Student:# ROLE = 'STUDENT'# @classmethod# def check_course(cls):# print('查看课程了')## @staticmethod# def login():# print('登录')# # 反射查看属性# # print(Student.ROLE)# # print(getattr(Student,'ROLE'))## # 反射调用方法# # getattr(Student,'check_course')() # 类方法# # getattr(Student,'login')() # 静态方法## num = input('>>>')# if hasattr(Student,num):# getattr(Student,num)() # 对象# 方法 对象属性# class A():# def __init__(self,name):# self.name = name## def func(self):# print('in func')## a = A('alex')# print(a.name)# print(getattr(a,'name'))# getattr(a,'func')() # 模块# import os # 别人写好的python代码的结合# # os.rename('__init__.py','init')# # getattr(os,'rename')('init','__init__.py') # == os.rename# rename = os.rename# rename2 = getattr(os,'rename')# rename2('__init__.py','init') # os.rename('__init__.py','init')# rename('init','init2') # os.rename('init','init2') # def wahaha():# print('wahaha')## def qqxing():# print('qqxing') # 反射自己模块中的内容 找到自己当前文件所在的命名空间# wahaha()# qqxing() # import sys# print(sys.modules)# import 都相当于导入了一个模块# 模块哪个导入了 哪个没导入 在我的python解释器里应该记录下来# import sys 是一个模块,这个模块里的所有的方法都是和python解释器相关的# sys.modules 这个方法 表示所有在当前这个python程序中导入的模块# '__main__': <module '__main__' from 'D:/sylar/python_workspace/day20/4.反射.py'># print(sys.modules['__main__'])# my_file = sys.modules['__main__']# my_file.wahaha()# my_file.qqxing()# # 'qqxing'# # 'wahaha'# getattr(my_file,'wahaha')()# getattr(my_file,'qqxing')() # 反射# hasattr,getattr# 类名.名字 # getattr(类名,'名字')# 对象名.名字 # getattr(对象,'名字')# 模块名.名字 # import 模块 # getattr(模块,'名字')# 自己文件.名字 # import sys # getattr(sys.modules['__main__'],'名字') ------------------------------------------------内置方法-------------------------------------------------------
# __名字__ # 类中的特殊方法\内置方法 # 双下方法 # 魔术方法 magic_method# 类中的每一个双下方法都有它自己的特殊意义 # __call__ 相当于 对象()# __len__ len(obj)# __new__ 特别重要 开辟内存空间的 类的构造方法 # 写一个单例类=# __str__ str(obj),'%s'%obj,print(obj) # 所有的双下方法 没有 需要你在外部直接调用的# 而是总有一些其他的 内置函数 特殊的语法 来自动触发这些 双下方法
# __call__ flask# class A:# def __call__(self, *args, **kwargs):# print('执行call方法了')# def call(self):# print('执行call方法了')# class B:# def __init__(self,cls):# print('在实例化A之前做一些事情')# self.a = cls()# self.a()# print('在实例化A之后做一些事情')# a = A()# a() # 对象() == 相当于调用__call__方法# a.call() # A()() # 类名()() ,相当于先实例化得到一个对象,再对对象(),==>和上面的结果一样,相当于调用__call__方法# B(A) # __len__# 内置函数和类的内置方法是由奸情的# len(dict)# len(tuple) str list set# class mylist:# def __init__(self):# self.lst = [1,2,3,4,5,6]# self.name = 'alex'# self.age = 83# def __len__(self):# print('执行__len__了')# return len(self.__dict__)## l = mylist()# print(len(l))# len(obj)相当于调用了这个obj的__len__方法# __len__方法return的值就是len函数的返回值# 如果一个obj对象没有__len__方法,那么len函数会报错 # iter和next的例子# __iter__ iter(obj)# __next__ next# def iter(obj):# return obj.__iter__()# l = [1,2,3]# iter(l) # l.__iter__() # 练习# 类# self.s = ''# len(obj) = str的长度# class My:# def __init__(self,s):# self.s = s# def __len__(self):# return len(self.s)# my = My('abc')# print(len(my)) # __new__ # ==> 构造方法# __init__ # ==> 初始化方法 # class Single: # def __new__(cls, *args, **kwargs): # # print('在new方法里') # obj = object.__new__(cls) # print('在new方法里',obj) # return obj # def __init__(self): # print('在init方法里',self) # 1.开辟一个空间,属于对象的# 2.把对象的空间传给self,执行init# 3.将这个对象的空间返回给调用者# obj = Single()# single的new,single没有,只能调用object的new方法# new方法在什么时候执行??? # 在实例化之后,__init__之前先执行new来创建一块空间 # 单例# 如果一个类 从头到尾只能有一个实例,说明从头到尾之开辟了一块儿属于对象的空间,那么这个类就是一个单例类# class A:pass# a = A()# a2 = A()# a3 = A()# print(a,a2,a3) # 单例类# class Single:# __ISINCTANCE = None# def __new__(cls, *args, **kwargs):# if not cls.__ISINCTANCE:# cls.__ISINCTANCE = object.__new__(cls)# return cls.__ISINCTANCE# def __init__(self,name,age):# self.name = name# self.age = age## s1 = Single('alex',83)# s2 = Single('taibai',40)# print(s1.name)# print(s2.name)# print(s1,s2) # __str__# l = [1,2,3] # 实例化一个list的对象# # l是个对象# print(l) # class Student:# def __str__(self):# return '%s %s %s'%(self.school,self.cls,self.name)## def __init__(self,name,stu_cls):# self.school = 'oldboy'# self.name = name# self.cls = stu_cls## he = Student('hezewei','py14')# # print(he)# huang = Student('huangdongyang','py14')# # print(huang)# # print(str(he)) # 内置的数据类型,内置的类,相当于执行__str__# print('学生1 : %s'%he) # print一个对象相当于调用一个对象的__str__方法# str(obj),相当于执行obj.__str__方法# '%s'%obj,相当于执行obj.__str__方法
转载于:https://www.cnblogs.com/kcwxx/p/9392475.html
python_day21面向对象的进阶(反射,内置方法,)相关推荐
- 29 反射 内置方法 元类
反射 内置方法 元类 1 反射 1.1 什么是反射机制 Python属于动态语言,即程序执行变量定义语句时才确定变量的类型. 反射机制指的是在程序的运行过程中能够动态地获取对象信息以及动态地调用对象功 ...
- python 面向对象_多态、内置方法、反射
内容: 1.接口思想 2.抽象类思想 3.多态 4.内置方法 5.反射 1.接口思想 建立关联的桥梁,方便管理代码 接口类:用来定义功能的类,位继承它的子类提供功能 该类的功能方法一般不需要实现体,实 ...
- Python之路(第二十七篇) 面向对象进阶:内置方法、描述符
一.__call__ 对象后面加括号,触发执行类下面的__call__方法. 创建对象时,对象 = 类名() :而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()( ...
- issubclass和isinstance 反射 内置方法(魔术方法)
目录 issubclass 和 isinstance issubclass isinstance 反射 通过用户输入的key,value往对象中赋值 动态的往对象中放方法 动态的删除属性 动态删除对象 ...
- Python学习day07 - Python进阶(1) 内置方法
Python学习day07-Python进阶(1)数据类型的内置方法一. 数字类型内置方法1. 整型内置方法1.1 作用1.2 定义方法1.3 内置方法1.4 存在一个还是多个值1.5 有序or无序1 ...
- python类的内置方法_python面向对象之类中的内置方法
__setattr__,__delattr__,__getattr__,__getattribute__以及标准类型的二次加工 __setattr__,__delattr__,__getattr__的 ...
- 0418 面向对象进阶 反射内置函数
绑定:class A:def func1(self):pass # 对象与方法之间的绑定def func4(self): pass # 对象与方法之间的绑定 @classmethoddef func2 ...
- 面向对象之反射和其他内置方法
一.反射 1.概念:主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.简而言之,就是自身调用自身即可实现已定义的某一功能,以达到简化程序的作用. 2.python面向对象中的反射是指通过字符 ...
- python全栈开发基础【第十七篇】面向对象反射和内置方法
一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被 ...
最新文章
- canvars 画花
- mac curl命令下载文件
- Delphi (Library Path Browsing Path)
- 三层交换机解决不同VLAN间的通信—Vecloud微云
- ssh: connect to host localhost port 22: Connection refused 问题
- acrobat 下拉列表 逻辑_记一次 无限列表 滚动优化
- Struct2_定义拦截器并使用注解方式作用在Action的方法中
- 区块链应用@纸贵科技:基于阿里云容器服务护航内容版权
- python3 中方法各种参数和返回值
- Exchange 2010 (四) CAS Array部署
- opatch java.lang.OutOfMemoryError:Java heap space错误一例
- linux防火墙知识,Iptables防火墙 基础知识
- 站闻资讯项目开发个人总结
- mt65xx android phone win10驱动,mt65xx android phone驱动
- 一图掌握ICT项目管理流程图【实例】
- arcgis oracle数据库失败,Oracle数据库之[ArcGIS]Oracle RAC下创建地理数据库失败的解决方法...
- 为什么从Java开发转测试?
- 用C语言开发一个BT下载软件(一) ------ BitTorrent协议 -2
- 如何对全站进行死链接检测?
- TI 蓝牙4.0芯片 cc2540
热门文章
- 科学家发现量子大脑传感器可以跟踪脑电波,这可能对发现脑疾病至关重要
- 关卡设计快速入门_2. 导航视口
- JAVA实现从上往下打印二叉树(《剑指offer》)
- mysql100万数据一键下载csv_使用PHP来导入包含100万条数据的csv文件,请问你最快多久能全部导入mysql 数据库?...
- 关于英伟达数字人文章的致歉和说明
- 「土行孙」机器人登上Science子刊封面,用气流在地下穿梭自如,速度达每秒4.8米...
- 当顶流厂商谈论智能手表,他们到底在谈论什么
- 腾讯服务器“上天”、大疆云台会飞、淘宝被掰弯了……这是昨天各大科技公司的最新产品...
- 百度发布智能电视伴侣,并公布短视频计划
- 四周第四次课 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 x