zoukankan      html  css  js  c++  java
  • (四)4-1 Python的类

    1、类的一般形式
    我们一般使用class关键字创建一个类,class后面跟类名字,可以自定义,最后以冒号结尾。
    class ClassName:
    '''类的说明'''
    类的内容
    类的内容可以写类的全局变量,方法等:

    class ren(object):
        '''this is new class'''
        name = 'boy'
        sex = 'man'
        def sayhai(self):
            print("hello world!")
    a = ren()
    print(type(a))
    print(a.name)
    print(a.sex)
    a.age = 10
    print(a.age)
    a.sayhai()

    运行结果:

    <class '__main__.ren'>
    boy
    man
    10
    hello world!

    注:1、 object默认是所有类的父类,不写默认继承object
    2、a=ren(),就是把ren实例化
    3、以上打印a的类型就是一个ren的类
    4、调用类的方法和变量,直接实例化类的后面用"."调用就可以
    5、如果想给实例a添加变量或者赋值,直接用"."加变量赋值就可以

    2、类的构造器

    init__构造函数,在生成对象时调用,由于类可以起到模板的作用,因此可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑定上去:

    class Student(object):
    def __init__(self,name,score):
    self.name = name
    self.score = score
    __init__方法的第一个参数永远是self,表示创建的实例本身,因此在__init__方法内部,可以把各种属性绑定到self,因为self就指向实例本身。
    有了__init__方法,在创建实例的时候,就不能传入空的参数,必须传入与__init__方法匹配的参数,但是self不需要传入,python解析器自己会把实例变量传进去。

    class Student(object):
        def __init__(self,name,score):
            self.name = name
            self.score = score
        def hello(self):
            print('hello {0}'.format(self.name))
    s = Student('zhan',99)
    print(s.name)
    print(s.score)
    s.hello()

    运行结果:

    zhan
    99
    hello zhan

    注:1、在传递参数的时候,必须是传递两个参数,name和score,不然报错
    2、self的参数不用传递,python自动会把student实例化的s传递给第一个参数,即self

    类的继承

    继承。你现在有个A类,现在需要写一个B类,但是B类是A类的特殊类,我们可以使用继承,B类继承A类时,B类会自动获得A类的所有属性和方法,A类成为父类,B类成为子类,子类除了继承父类的属性和方法,还可以自定义自己的属性和方法,大大增加了代码的复用性。
    我们可以继承object类,object类是所有类的父类,所有的类都默认继承object类,他是一个超级类,如果不写,默认继承Object。
    继承类的格式:
    class A: #定义类A
    pass
    class B: #定义类B
    pass
    class C(A,B): #继承类A和B
    pass
    多继需要在父类的位置,直接写多个父类就可以,然后用","分开,C类就是同时继承了A类和B类
    Python类的继承注意事项:
    1、在继承中类的构造(__init()方法)不会自动调用,需要在子类的构造中调用
    2、Python总是首先继续子类的方法,如果子类没有找到,才回父类中查找
    例1:

    class parent():
        name = 'parent'
        age = 100
        sex = 'male'
        def __init__(self):
            print('my name is {0}'.format(self.name))
        def get_name(self):
            return self.name
        def get_sex(self):
            return self.sex
    
    class child(parent):
        name = 'child'
        age = 10
        def __init__(self):
            print('my name is {0}'.format(self.name))
        def hello(self):
            print('hello world')
    
    a = child()
    a.hello()
    print(a.get_name())
    print(a.get_sex())

    运行结果:

    my name is child
    hello world
    child
    male
  • 相关阅读:
    pycharm中使用redis模块入门
    ubuntu sudo apt-get update与sudo apt-get upgrade的作用及区别,以及python pip的安装
    pycharm修改快捷键
    python2.7.5安装docker-compose的方法
    (二)影响持续交付的因素
    (一)持续交付的定义与价值
    CentOS6的/etc/rc.local不执行的问题解决
    Redis集群进阶之路
    好文收集(长期更新)
    MongoDB如何释放空闲空间?
  • 原文地址:https://www.cnblogs.com/pythonlx/p/7795915.html
Copyright © 2011-2022 走看看