漫天飞雪

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

__str__

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

# __str__: 在对象被打印时自动触发,可以用来定义对象被打印时的输出信息
# 注意:必须返回一个字符串类型的值

# class People:
  # def __init__(self, name, age):
    # self.name = name
    # self.age = age
#
  # def __str__(self): #当执行print(obj1)的时候,这个方法就是触发
    # # print('run..........') #这条print语句也会打印
    # return '<name:%s age:%s>' % (self.name, self.age) #打印出来的就不是个object的内存地址了,就是按照return的形式打印


# obj1 = People('egon', 18)
# print(obj1) # print(obj1.__str__())

# obj2=list([1,2,3])
# print(obj2)

__del__
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# __del__: 在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源
# class Foo:
  # def __init__(self,x,filepath,encoding='utf-8'):
    # self.x=x
    # self.f=open(filepath,'rt',encoding=encoding) #f对应着一个被打开的文件
#
    # def __del__(self): 当执行del obj的时候,这个方法就是触发
      # print('run.....') #这句话也会被打印
      # # 回收对象关联的其他资源
      # self.f.close() #如果单纯的删掉对象,那么被打开的文件资源不会立即被回首。所以需要在__del__方法里,关闭打开的文件资源。
#
# obj=Foo(1,'a.txt')
# # del obj
# print('主===========>')

__call__

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


# __call__: 在对象被调用时会自动触发该方法,可以把这个类型的对象当作函数来使用,相当于 重载了括号运算符。
class Foo:
  def __init__(self,x,y):
    self.x=x
    self.y=y

  def __call__(self, *args, **kwargs):
    print(self,args,kwargs)

obj=Foo(1,2)
obj(1,2,a=3,b=4) #obj.__call__(obj,1,2,a=3,b=4)

 

#反射:通过字符串来反射/映射到对象/类的属性上
class People:
  def __init__(self,name,age):
    self.name=name
    self.age=age

  def run(self):
    print('%s is running' %self.name)


obj=People('egon',18)

# print(obj.__dict__)
# print(obj.name) #obj.__dict__['name']

# obj.name='EGON' #obj.__dict__['name']='EGON'
#
# del obj.name # del obj.__dict__['name']
#
# obj.sex='male' #obj.__dict__['sex']='male'

# attr=input('>>>: ').strip() #attr='name'
# obj.'name'


# print(hasattr(obj,'name')) # 'name' in obj.__dict__ #看obj有没有"name"这个属性
# print(getattr(obj,'name')) # obj.__dict__['name'] #获得obj里的属性"name"的值,找不到会报错
# print(getattr(obj,'xxx',None)) # obj.__dict__['xxx'] #获得obj里的属性"name"的值,找不到会返回None

# setattr(obj,'name','EGON') #obj.__dict__['name']='EGON' #设置obj里的属性"name"的值为"EGON",没有则添加,有的话就覆盖
# setattr(obj,'xxx',1111) #obj.__dict__['xxx']=111
# print(obj.name)
# print(obj.__dict__)

# delattr(obj,'name')
# print(obj.__dict__)

# import os
# os.remove
# print(hasattr(os,'remove'))

class Ftp:
def get(self):
print('get')

def put(self):
print('put')

def login(self):
print('login')

def run(self):
while True:
cmd=input('>>>: ').strip() #cmd='get'
if hasattr(self,cmd): #如果此对象有"cmd"这个属性
method=getattr(self,cmd) #就拿到这个这个属性的内存地址,付给一个新的值
method() #调用
else:
print('输入的方法不存在')


obj=Ftp()
obj.run()

posted on 2018-12-27 08:51  漫天飞雪世情难却  阅读(93)  评论(0编辑  收藏  举报