python:面向对象进阶

来源:转载

1,反射

反射:使用字符串类型的名字去操作变量反射就没有安全问题,去操作内存中已经存在的变量 #反射对象中的属性和方法 
class A: price=20print(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=20print(getattr(A,'price'))

#反射模块的属性 

import myprint(getattr(my,'day'))
#反射自己模块中的变量
import sysprint(getattr(sys.modules['__main__'],'year'))getattr(sys.modules['__main__'],'qqxing')()

setattr设置/修改变量

class A: passsetattr(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')()

分享给朋友:
您可能感兴趣的文章:
随机阅读: