爱若晨风 发表于 2017-5-6 12:10:59

关于python中类的小总结1

  关于类的小总结:

一、什么是类?


class 名称(父类名字,没有父类就写object):
pass
  二、什么是方法?


类里面定义的函数就是方法,如:

class 名称(父类名字,没有父类就写object):
def sayHello(self): # 这个类里面的函数,就是方法。
print 'hello!'
  三、什么是类实例?


如以下一个类:

class Goodmorning(object):
pass
  创建一个类实例很简单,gm = Goodmorning()
  四、什么是子类?


简单的说就是定义个类,括号里写上父类的名字,就是子类,子类继承父类的方法。如

class Good(Goodmorning):
pass
  五、如何调用实例方法?


如下面一个类:

class Sh(object):
def sayHello(self):
print 'hello!'
  首先实例化这个类,

sh = Sh()

然后用句点调用方法,

sh.sayHello()
  六、继承及覆盖父类的方法


首先创建一个父类A:

>>> class A(object):

    def sayhello(self):

        print 'hello!'

实例化这个父类:

>>> a = A()

调用方法:

>>> a.sayhello()

hello!

创建一个子类B看继承父类方法:

>>> class B(A):

    def s(self):

        pass

实例化这个子类:

>>> b = B()

调用方法:(继承了父类的方法)

>>> b.sayhello()

hello!

再创建一个子类C看覆盖父类方法:

class C(A):

    def sayhello(self):

        print 'CCCCCCsay hello!'

实例化这个子类:

>>> c = C()

调用方法:(覆盖了父类的方法)

>>> c.sayhello()

CCCCCCsay hello!

虽然子类C继承了父类A的方法sayhello(),但是子类C定义了自己的方法sayhello(),因此覆盖了父类的方法。当然,如果我们需要用到父类的sayhello()方法时,可以用父类的实例来调用,如:

>>> a.sayhello()

hello!
  
七、关于__init__()方法


__init__()方法是在类被实例化时首先被自动调用的方法,如

>>> class SA(object):

    def __init__(self):

        print 'first!!'


       

>>> sa =SA()

first!!

__init__()方法的覆盖,如:

>>> class P(object):

    def __init__(self):

        print "calling P's constructor"


       

>>> class C(P):

    def __init__(self):

        print "calling C's constructor"


       

>>> c = C()

calling C's constructor

如想同时获得子类C和父类P的__init__方法:

>>> class C(P):

    def __init__(self):

        P.__init__(self)

        print "calling C's constructor"


       

>>> c = C()

calling P's constructor

calling C's constructor

或使用super()

>>> class C(P):

    def __init__(self):

        super(C, self).__init__()

        print "calling C's constructor"


       

>>> c = C()

calling P's constructor

calling C's constructor

可以考虑使用super(C, self).__init__()代替P.__init__(self),因为这样可以不必写父类名字(P),这样的话当改变了继承关系的时候,不用到处去找哪个地方写了P.__init__(self)……当然,super()的主要用途就是查找父类属性。

八、当存在多个父类、子类、子孙类时,方法解释顺序


比如有两个父类P1、P2,两个子类C1、C2、一个子孙类F,当F的实例调用F中不存在的方法时,查找顺序为由下至上,由左至右的顺序,及F-->C1-->C2-->P1-->P2,若中间就找到,如C2查找到要调用的方法,即停止(这里说的是新式类。)

九、类、实例和其他对象的几个内建函数


0x01.issubclass(a, b)用来判断a是否是b的子类(或子孙类等),返回True或False,如:

>>> class P(object):

    pass


>>> class C(P):

    pass


>>> class D(C):

    pass


>>> issubclass(C, P)

True

>>> issubclass(D, P)

True

>>> issubclass(D, C)

True

如果a就是b的话,也会返回True:

>>> issubclass(P, P)

True


0x02.isinstance(a, b)用来判断a是否是b的实例,同样返回True或False,如

>>> class A(object):

    pass


>>> class B(object):

    pass


>>> a = A()

>>> b = B()

>>>

>>> isinstance(a, A)

True

>>> isinstance(b, A)

False

>>> isinstance(b, B)

True

可以想象,isinstance(a, b)同样可以判断一个对象a是否是b类型,如:

>>> isinstance(7, int)

True


0x03.hasattr(), getattr(),setattr(), delattr()

(1)hasattr()用来判断某类中是否有某个属性

(2)getattr()用来获取某类中的某个属性

(3)setattr()用来向某个类中添加一个属性或覆盖某个属性

(4)delattr()用来从某个类中删除一个属性

>>> class sayH(object):

    def __init__(self):

        self.say = 'hello!'


       

>>> sh = sayH()

>>> hasattr(sh, 'say')

True

>>> getattr(sh, 'say')

'hello!'

>>> setattr(sh, 'bye', 'byebye!')

>>> getattr(sh, 'bye')

'byebye!'

>>> delattr(sh, 'say')

>>> getattr(sh, 'say')


Traceback (most recent call last):

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

    getattr(sh, 'say')

AttributeError: 'sayH' object has no attribute 'say'


0x04.dir(a)返回a的属性的列表


0x05.vars(a)返回a的属性及值的字典
  ============================
  未完……


关于python中类的小总结1






关于python中类的小总结2
页: [1]
查看完整版本: 关于python中类的小总结1