类与对象

1.改变对象的字符串显示

重载__str__ ,   __repr__方法,当打印对象或者将对象转换为字符串的时候,会自动调用这些重载的方法。打印操作会首先尝试__str__和str内置函数,当__str__没有定义时,会调用__repr__.

class Point:
      def __init__(self, x, y):
            self.x = x
            self.y = y

       def __repr__(self):
             return "Point({0},{1})".format(self.x, self.y)

       def __str__(self):
             return "({0},{1})".format(self.x, self.y)

    
2.实现__enter__, __exit__来使对象支持上下文管理协议。当出现在with语句中的时候,__enter__方法被触发,返回的对象被赋值为as语句声明的对象,然后执行with语句块中的内容。最后触发__exit__方法执行清理工作

3.使用_  和__来实现python的伪私有属性

4.通过给类添加__slots__属性来极大的减少实例所占的内存

class Person(object):
      __slots__=['name', 'age']
      def __init__(self, name, age):
           self.name = name
           self.age = age
5.使用property来管理类属性

   特性协议允许我们把一个特定属性的get和set操作指向我们所提供的函数或方法,使得我们能够插入在属性操作时自动运行的代码.一个property属性实际上就是一系列相关绑定方法的集合

class Person(object):
      def __init__(self, name):
           self._name = name
     
      @property
      def name(self):
          return self._name
    
      @name.setter
      def name(self, name):
          if not isinstance(value, str):
                raise TypeError('need a string')
          self._name = value

      @name.deleter
      def name(self):
          del self._name

class Person(object):
      def __init__(self, name):
          self._name = name
      def getName(self):
          return self._name
      def setName(self,value):
          if not isinstance(value, str):
             raise TypeError('need a string')
      def delName(self):
          del self._name
      name = property(getName, setName, delName)

这两种方法达到的效果一样
6.调用父类方法   super

通过 D.__mro__ 可以查看D的继承列表

class A(object):
    def __init__(self):
          print "A.__init__"

class B(A):
     def __init__(self):
           super(B, self).__init__()
           print "B.__init__"

class C(A):
       def __init__(self):
              super(C, self).__init__()
              print "C.__init__"

class D(B,C):
        def __init__(self):
              super(D, self).__init__()
              print "D.__init__" 
d = D()
A.__init__
C.__init__
B.__init__
D.__init__
print D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值