zoukankan      html  css  js  c++  java
  • python面向对象-类和实例

    面向对象最重要的概念就是类(Class)和实例(Instance),要牢记类是抽象的模板,而实例时根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但是各自的数据可能不同。 

    1

    定义类要用class关键字,名称一般用大写字母开头,这是惯例。

    紧接着是(object),表示该类是从哪个类继承下来的。如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。

    class Person(object):
      pass

    接下来要编写构造函数

    class Person():
        def __init__(self, name. lang, website):
            self.name = name
            self.lang = lang
            self.website =website

    上面的类中有一个名为:init()的函数,命名是用“__”开始和结束。

    先明确概念:类就是一种对象类型,和数值、字符串、列表等类型一样。这里构建的类名叫Person,那么我们就要建立一种对象类型,这种类型被称之为Person,就如同有一种对象类型是list一样。

    在构建Person类的时候,首先要做的就是对这种类型进行初始化,也就是要说明这种类型的基本结构,一旦这个类型的对象被调用了,第一件事情就是要运行这个类型的基本结构,也就是类Person的基本结构。就好比我们每个人,在头脑中都有关于“人”这样一个对象类型(对应着类),一旦遇到张三(张三是一个具体人),我们首先运行“人”这个类的基本结构:一个鼻子两只眼,鼻子下面一张嘴。如果张三符合这个基本机构,我们不会感到惊诧(不报错),如果张三不符合这个基本结构(比如三只眼睛),我们就会感到惊诧(报错了)。

    由于类是我们自己构造的,那么基本结构也是我们自己手动构造的。在类中,基本结构是写在init()这个函数里面。故这个函数称为构造函数,担负着对类进行初始化的任务。

    还是回到Person这个类,如果按照上面的代码,写好了,是不是init()就运行起来了呢?不是!这时候还没有看到张三呢,必须看到张三才能运行。所谓看到张三,看到张三这样一个具体的实实在在的人,此动作,在python中有一个术语,叫做实例化。当类Person实例化后立刻运行init()函数

     

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

     

    2

    类的实例化

    info = Person("qiwsir","python","qiwsir.github.io")     #实例化Person
    print("info.name=",info.name)
    print("info.lang=",info.lang)
    print("info.website=",info.website)

    上述代码运行结果:

    info.name= qiwsir  # .点后面称为类或者实例的属性
    info.lang= python
    info.website= qiwsir.github.io

    在上面的代码中,建立的类Person,构造函数申明了这个类的基本结构:name,lang,website。

    注意观察:info=Person(“qiwsir”,”python”,”qiwsir.github.io”),这句话就是将类Person实例化了。也就是在内存中创建了一个对象,这个对象的类型是Person类型,这个Person类型是什么样子的呢?就是init()所构造的那样。

    在实例化时,必须通过参数传入具体的数据:name=”qiwsir”,lang=”python”,website=”qiwsir.github.io”。这样在内存中就存在了一个对象,这个对象的类型是Person,然后通过赋值语句,与变量info建立引用关系。


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

    和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数

    3

    数据封装

    这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法

    要定义一个方法,除了第一个参数是self外,其他和普通函数一样。要调用一个方法,只需要在实例变量上直接调用,除了self不用传递,其他参数正常传入

  • 相关阅读:
    Z-stack之OSAL初始化流程
    回调函数
    VCC,VDD,VEE,VSS,VPP 表示的意义
    ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
    SQL Server 2005 版本的操作系统兼容性详细列表
    Windows Xp Home Edition 安装IIS组件
    MySql 5.7中添加用户,新建数据库,用户授权,删除用户,修改密码
    AtCoder Beginner Contest 077(ABC)
    Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)(A B C D)
    B. Which floor?
  • 原文地址:https://www.cnblogs.com/RebeccaG/p/11732836.html
Copyright © 2011-2022 走看看