博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python_day21面向对象的进阶(反射,内置方法,)
阅读量:6114 次
发布时间:2019-06-21

本文共 7043 字,大约阅读时间需要 23 分钟。

# 两个内置函数 * # 反射  ***** # 内置方法 *** # 类(定义)     # 静态属性  类属性(变量)  直接写在类中,全大写     # 动态属性  方法(函数)     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__': 
# 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

你可能感兴趣的文章
ecshop注册送红包ecshop注册就送相应金额
查看>>
零成本建立的.NET小组开发平台
查看>>
Installed .NET Framework 4.5 Ajax POST IIS hang
查看>>
cocos2d-x make: *** [clean-box2d_static-armeabi] Error 1
查看>>
VS2010无法修改资源文件
查看>>
邮箱工具(尚未完成)的几个组件类
查看>>
inkscape - 百度百科
查看>>
使用 Python 进行稳定可靠的文件操作
查看>>
数据结构之后缀数组
查看>>
.Net 中DataSet和DataTable的 区别与联系
查看>>
Windows 管理
查看>>
HDU 1619 Unidirectional TSP(单向TSP + 路径打印)
查看>>
微软BI 之SSIS 系列 - 使用 Multicast Task 将数据同时写入多个目标表,以及写入Audit 与增量处理信息...
查看>>
使用avalon 实现一个订座系统
查看>>
Ubuntu 如何downgrade降级系统
查看>>
MySQL执行外部sql脚本
查看>>
固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异
查看>>
java 结束程序进程 代码
查看>>
『摄影欣赏』20幅精美的秋天落叶风景欣赏【组图】
查看>>
基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
查看>>