Python类

发布时间:2019-08-29 07:39:36编辑:auto阅读(1831)


    Python是一门面向对象的语言,对于面向对象语言来说,最重要的概念就是类(Class)和实例(Intance),所以python在创建一个类或者一个对象是很容易的。

    (Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。


    1.类的一般形式

      创建类我们一般用class关键字来创建一个类,class后面跟类名字,可以自定义,最后以冒号结尾,类的内容可以写类的全局变量、方法等,如下所示:


    class ClassName:

       '''类的说明'''

    类的内容


    例子:

    class Student(object):

       '''This is a first class'''

       name = "li"

       sex = "male"

       age = 27

       def info(self):

           print("%s, %s, %d" %(self.name,self.sex,self.age))

    a = Student()

    print(type(a))

    print(a)

    print(a.name)

    print(a.sex)

    print(a.age)

    a.info()


    结果:

    <class '__main__.Student'>

    <__main__.Student object at 0x02552030>

    li

    male

    27

    li, male, 27


    说明:

    1)object默认是所有类的父类,不写则默认继承object

    2)a = Student(),就是把类Student实例化

    3)打印a的类型,实际上就是一个Student的类

    4)调用类的方法和变量,直接实例化类后用“.”调用

    5)给实例a添加变量或者赋值,可以直接用“.”加变量赋值即可



    2.类的构造器

            __init__构造函数,在生成对象时调用。

      由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把namescore等属性绑上去。


    例子:

    class Student(object):

       def __init__(self,name,sex):

           self.name = name

           self.sex = sex

       def hello(self):

           print('hello {0}'.format(self.name))

    a = Student("zhang","male")

    a.hello()


    结果:

    hello zhang



    说明:

    1)__init__方法的第一个参数永远是self,表示创建的实例本身,因此在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身


    2)有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去


    3)在传递参数的时候,必须是传递两个参数,name和sex,不然报错;Self的参数不用传递,python自动会把Student实例化的a传递给第一个参数self



    3. 类的继承

      如果你有一个现有的A类,现在需要写一个B类,但是B类是A类的特殊版,我们就可以使用继承,B类继承A类时,B类会自动获得A类的所有属性和方法,A类称为父类,B类陈为子类,子类除了继承父类的所有属性和方法,还可以自定义自己的属性和方法,大大增加了代码的复用性。

       

    多继承的格式:

    class A:        # 定义类 A

    .....

    class B:          # 定义类 B

    ..... 

    class C(A,B):       # 继承类 A 和 B


    例子:

    class parent(object):

       name = "parent"

       sex = "male"

       def __init__(self):

           print("I am: %s ,my sex is: %s" %(self.name,self.sex))

    class child(parent):

       def hello(self):

           print("hello,child")

    b =child()

    b.hello()


    结果:

    I am: parent ,my sex is: male

    hello,child


    说明:

    1)在继承中,类构造的__init__方法不会调用

    2)Python总是首先取子类中的方法,如果子类没有找到,才会去父类中查找

    3)子类和父类都存在相同的run()方法时,子类的run()覆盖了父类的run()


    例子:

    class Animal(object):

      def run(self):

          print 'Animal is running...'

    class Dog(Animal):

      #pass

      def run(self):

          print 'Dog is running...'

    class Cat(Animal):

      #pass

      def run(self):

          print 'Cat is running...'

    Dog().run()

    Cat().run()


    结果:

    Dog is running...

    Cat is running...



    4.类的方法重写

    在python中继承中的一些特点:

     

    1)在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。 
    2)在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数 
    3)Python总是首先查找对应类型的方法,如果它不能在派生类(子类即当前类)中找到对应的方法,它才开始到基类(父类)中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。 
    4)由上面的关系,可以进行方法的重写,在子类中重写父类方法。


    例子:

    class A:

       def output(self):

           print('This is a test case for class A')

    class B(A):

       def output(self):

           print('This is a test case for class B')

    b = B()

    b.output()


    结果:

    This is a test case for class B


关键字

上一篇: python 进程

下一篇: Python Twisted