内容简介:python:面向对象进阶
1,反射
反射:使用字符串类型的名字去操作变量
反射就没有安全问题,去操作内存中已经存在的变量
#反射对象中的属性和方法
class A:
price=20
print(getattr(A,'price'))
#反射对象的属性
class A:
def func(self):
print('in func')
a =A()
a.name ='alex'
ret =getattr(a,'name')#通过变量名的字符串形式取到的值
print(ret)
#反射对象的方法
ret =getattr(a,'func') ret()
#反射类的方法:
if hasattr(A,'func')):
getattr(A,'func')()
#反射类的属性
class A:
price=20
print(getattr(A,'price'))
#反射模块的属性
import my print(getattr(my,'day'))
#反射自己模块中的变量
import sys print(getattr(sys.modules['__main__'],'year')) getattr(sys.modules['__main__'],'qqxing')()
setattr设置/修改变量
class A: pass setattr(A,'name','alex') print(A,name)
delattr删除变量
delattr(a,'name')
2,__str__和__repr__
改变对象的字符串显示__str__,__repr__
自定制格式化字符串__format__
# 双下方法 # obj.__str__ str(obj) # obj.__repr__ repr(obj)
class Teacher:
def __init__(self,name,salary):
self.name =name
self.salary =salary
def __str__(self):
return "Teacher's object :%s"%self.name
def __repr__(self):
return str(self.__dict__)
def func(self):
return 'wahaha'
nezha =Teacher('nazha',250)
print(nazha)
print(repr(nezha))
print('>>> %r'%nezha)
#object 里有一个__str__,一旦被调用,就返回调用这个方法的#对象的内存地址 l = [1,2,3,4,5] # 实例化 实例化了一个列表类的对象 print(l) # %s str() 直接打印 实际上都是走的__str__ # %r repr() 实际上都是走的__repr__ # repr 是str的备胎,但str不能做repr的备胎 # print(obj)/'%s'%obj/str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有,那么他返回的必定是一个字符串 # 如果没有__str__方法,会先找本类中的__repr__方法,再没有再找父类中的__str__。 # repr(),只会找__repr__,如果没有找父类的
class Classes:
def __init__(self,name):
self.name = name
self.student = []
def __len__(self):
return len(self.student)
def __str__(self):
return 'classes'
py_s9= Classes('python全栈9期')
py_s9.student.append('二哥')
py_s9.student.append('泰哥')
print(len(py_s9))
print(py_s9)
#__del__
class A:
def __del__(self): # 析构函数: 在删除一个对象之前进行一些收尾工作
self.f.close()
a = A()
a.f = open() # 打开文件 第一 在操作系统中打开了一个文件 拿到了文件操作符存在了内存中
del a # a.f 拿到了文件操作符消失在了内存中
del a # del 既执行了这个方法,又删除了变量
# __call__
class A:
def __init__(self,name):
self.name = name
def __call__(self):
'''
打印这个对象中的所有属性
:return:
'''
for k in self.__dict__:
print(k,self.__dict__[k])
a = A('alex')()
以上所述就是小编给大家介绍的《python:面向对象进阶》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 面向Python,面向对象(基础)
- 面向Python,面向对象(基础3)
- <<深入PHP面向对象、模式与实践>>读书笔记:面向对象设计和过程式编程
- 《JavaScript面向对象精要》之六:对象模式
- 《JavaScript面向对象精要》之三:理解对象
- 面向对象的程序设计之理解对象
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Spring in Action
Craig Walls / Manning Publications / 2011-6-29 / USD 49.99
Spring in Action, Third Edition has been completely revised to reflect the latest features, tools, practices Spring offers to java developers. It begins by introducing the core concepts of Spring and......一起来看看 《Spring in Action》 这本书的介绍吧!