关于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值