(安西) 发表于 2018-8-14 09:47:50

python学习之面向对象学习进阶

一、property属性高级用法  
可以将对象方法作为属性使用
  
例子:
  
class Foo:
  
    def __init__(self, age):
  
      )      self.__age = age
  

  
    @property
  
    def age(self):
  
      return self.__age
  

  
    @age.setter
  
    def age(self, args):
  
      self.__age = args
  

  
    @age.deleter
  
    def age(self):
  
      del self.__age
  

  
obj = Foo(20)
  
print(obj.age)
  
obj.age = 3
  
print(obj.age)
  
del obj.age
  
print(obj.age)
  

  
class Foo:
  
    def __init__(self, age):
  
      self.__age = age
  

  
    def get_age(self):
  
      return self.__age
  

  
    def set_age(self, args):
  
      self.__age = args
  

  
    def del_age(self):
  
      del self.__age
  

  
    age = property(get_age, set_age, del_age)
  

  
obj = Foo(20)
  
print(obj.age)
  
obj.age = 3
  
print(obj.age)
  
del obj.age
  
print(obj.age)
  

  
__str__方法,默认返回对象内存地址,可以修改重写默认方法
  
例子:
  
class Foo:
  
    def __init__(self, name, age):
  
      self.name = name
  
      self.age = age
  

  
    def __str__(self):
  
      return 'name: %s, age: %s' %(self.name, self.age)
  

  
obj = Foo('egon', '18')
  
print(obj)
  

  
__getitem__, __setitem__,__delitem__可以通过字典的方式调用属性和方法
  
例子:
  
class Foo:
  
    def __init__(self, name):
  
      self.name = name
  

  
    def __getitem__(self, item):
  
      print("getitem")
  
      return self.__dict__
  

  
    def __setitem__(self, key, value):
  
      print("setitem", key, value)
  
      self.__dict__ = value
  

  
    def __delitem__(self, key):
  
      print('del obj时,执行')
  
      self.__dict__.pop(key)
  

  
obj = Foo('egon')
  
print(obj.name)
  
#obj.name = 'alex'
  
#obj['name'] = 'alex'
  
print(obj['name'])
  
del obj['name']
  
print(obj['name'])
  

  
__call__回掉函数,可以将对象变成可调用的
  
例子:
  
class Foo:
  
    def __call__(self, *args, **kwargs):
  
      print('====>')
  
obj = Foo()
  
obj()
  

  
__getattr__
  
从对象中读取某个属性时,首先需要从self.__dicts__中搜索该属性,再从__getattr__中查找
  
__setattr__用来设置对象的属性,通过object中的__setattr__函数来设置属性
  
__delattr__用来删除对象的属性
  

  
例子:
  
class Foo:
  
    def __init__(self, x):
  
      self.x = x
  

  
    def __getattr__(self, item):
  
      print('getattr')
  

  
    def __setattr__(self, key, value):
  
      self.__dict__ = value
  

  
    def __delattr__(self, item):
  
      self.__dict__.pop(item)
  

  
obj = Foo(10)
  
obj.x = 1
  
print(obj.__dict__)
  
del obj.x
  
print(obj.__dict__)
  

  
obj.a = 1
  
obj.b = 2
  
print(obj.__dict__)
  
del obj.a
  
print(obj.__dict__)
  
print(obj.aaaaaaaaa
  

  
exec函数,将字符串中的python代码提取出来执行
  
例子:
  
s="print(x)"
  
g={'x':100000000}
  
l={'x':1}
  
exec(s,g,l)
  
s = "y=2"
  
exec(s, g, l)
  
print(g)
  
print(l)
页: [1]
查看完整版本: python学习之面向对象学习进阶