zoukankan      html  css  js  c++  java
  • python基础教程学习笔记七

     更加抽像

    对象的魔力

    多态 polymorphism

    Def (x,y):

    Return x+y

    Add(1,2)

           3

    封装 encapsulation

    继承 inheritance

    类和类型

    创建自已的类

    >>>class Person:

    #使用 self绑定方法

           def setName(self,name):

                  self.name=name

           def getName(self):

                  return self.name

           def greet(self):

                  print('hello,world! I am %s .' % self.name)

    >>>foo=Person()

    >>>bar=Person()

    >>>foo.setName('retacn yue')

    >>>bar.setName('three yue')

    >>>foo.name

    'retacn yue'

    >>>bar.name

    'three yue'

    >>>foo.getName()

    'retacn yue'

    >>>bar.getName()

    'three yue’

    >>>foo.greet()

    hello,world! Iam retacn yue .

    >>>bar.greet()

    hello,world! Iam three yue .

    特性函数和方法

    >>>class Bird:

           song='qwuaawk!'

           def sing(self):

                  print (self.song)

                 

    >>>bird=Bird()

    >>>bird.sing()

    qwuaawk!

    >>>birdsong=bird.sing

    >>>birdsong()

    qwuaawk!

    私有方法

    >>>class Secretive:

           def __inaccessible(self):

                  print('but you cant not seeme...')

           def accessible(self):

                  print('the seccret message is:')

                  self.__inaccessible()

                 

    >>>s=Secretive()

    >>> 

    >>>s.__inaccessible()

    Traceback (mostrecent call last):

      File "<pyshell#142>", line 1,in <module>

        s.__inaccessible()

    AttributeError:'Secretive' object has no attribute '__inaccessible'

    >>>s.accessible()

    the seccretmessage is:

    but you cant notsee me...

    注:实际上还参在类外访问这些方法

    #3.0不能访问

     s._Secretive__inaccessible

    <bound methodSecretive.__inaccessible of <__main__.Secretive object at 0x029B6B10>>

    类的命名空间

    >>>class MemberCounter:

           members=0

           def init(self):

                  MemberCounter.members+=1

                 

    >>>m1=MemberCounter()

    >>>m1.init()

    >>>MemberCounter.members

    1

    >>>m2=MemberCounter()

    >>> m2.init()

    >>>MemberCounter.members

    2

    指定超类

    >>> class Filter:

           definit(self):

                  self.blocked=[]

           deffilter(self,sequence):

                  return[x for x in sequence if x not in self.blocked]

          

    >>> classSPAMFilter(Filter):#filter的子类

           definit(self):#重写filter超类中的init方法

                  self.blocked=['SPAM']

                 

    >>> f=Filter()

    >>> f.init()

    >>> f.filter([1,2,3])

    [1, 2, 3]

    >>> s=SPAMFilter()

    >>> s.init()

    >>>s.filter(['SPAM','SPAM','SPAM','SPAM','egg','bacon','SPAM','SPAM'])

    ['egg', 'bacon']

    检查继承

    >>>issubclass(SPAMFilter,Filter)

    True

    >>>issubclass(Filter,SPAMFilter)

    False

    也可以使用特殊属性__bases__

    >>>SPAMFilter.__bases__

    (<class'__main__.Filter'>,)

    >>>Filter.__bases__

    (<class'object'>,)

    多个超类

    先继承类中的方法会重写后继承类中的方法

    这一点与c++有点类似,多重继承

    Java是单继承,接口可以实现多重继承

    >>> classCalculator:

           def calculate(self,expression):

                  self.value=eval(expression)

                 

    >>>class Talker:

           def talk(self):

                  print('Hi! My value is ',self.value)

                 

    >>>class TalkingCalculator(Calculator,Talker):

           pass

    >>>tc=TalkingCalculator()

    >>> tc.calculate('1+2*3')

    >>>tc.talk()

    Hi! My value is7

    接口和内省

    #检查方法是否存在

    >>>hasattr(tc,'talk')

    True

    >>>hasattr(tc,'test')

    False

    #检查方法是否可以调用

    >>>callable(getattr(tc,'talk',None))

    True

    >>>callable(getattr(tc,'test',None))

    False

    #3.0中可以使用以下方法

    >>>hasattr(getattr(tc,'test',None),'__call__')

    False

    >>>hasattr(getattr(tc,'talk',None),'__call__')

    True

  • 相关阅读:
    16位汇编第一讲简介
    COM编程_第一讲_深入COM框架以及实现简单的COM
    COM_第四讲_保存GUID_优化使用代码
    C语言_第二讲_规范以及常用数据类型
    C语言_第一讲_C语言入门
    计算机基础知识_原码反码补码
    计算机基础知识_进制转化
    计算机基础知识_硬件知识
    试题总结2
    试题总结1
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194204.html
Copyright © 2011-2022 走看看