python基础学习日志day6-面向对象

什么是面向对象编程

  OOP编程是利用“类”和对象来创建各种模型来实现对真实世界的描述。

  OOP具有可维护性和可扩展性

二:面向对象有那些特性

  1)CLASS类:一个类是对拥有相同属性的对象的抽象。类拥有类的属性和类的方法。

  2)OBJECT对象:一个对象即是一个类的实例化的实例。这个过程就实例化。

  3)Encapsulation封装:在类中对数据的赋值,内部调用对外部是透明。

  4)Inheritance继承:一个类可以派生成子类,在这个父类的定义的属性和方法自动被子类继承

  5)Polymorphism多态:是指一个基类中派生出了不同的子类,多态允许将子类的对象当作父类的对象使用,

   某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。

   这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定。

三:类的定义示例

# -*- coding:utf-8 -*-
__author__ = ‘shisanjun‘

class Person(object):        #类的定义,定义一个类, class是定义类的语法,Person是类名,(object)是新式类的写法
    def __init__(self,name): #构造函数,构造方法,初始方法,在生成一个角色时要初始化的一些属性就填写在这里
        self.NAME=name       #类的成员或者类的属性

    def sayhi(self):          #类的方法
        print("in the person" ,self.NAME)

d=Person("shi")#实例化产生的对象,称为实例 d就是实例化的对象
d.sayhi()实例化,就是Person类为模版,在内存里开一块空间和赋值成一个变量名

  注:self就是实例本身,实例化时会自动把实例本身通过self参数传进去。  

  1. 在内存中开辟一块空间指向d这个变量名
  2. Person中的__init__(self,name)相当于__init__(d,name)这name个值跟刚开辟的d关联起来,, 因为关联起来后,你就可以直接rd.name这样来调用

  3.self 过程

  总结:

  1. 上面的这个d = Dog(‘Lichang)动作,叫做类的“实例化”, 就是把一个虚拟的抽象的类,通过这个动作,变成了一个具体的对象了, 这个对象就叫做实例
  2. 刚才定义的这个类体现了面向对象的第一个基本特性,封装,其实就是使用构造方法将内容封装到某个具体对象中,然后通过对象直接或者self间接获取被封装的内容

四:类的三大特性

  1)封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏

      防止数据被随意修改
      使外部程序不需要关注对象内部的构造,只需要通过此对象对外提供的接口直接进行访问即口

  2)继承:承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类.

    继承的过程,就是从一般到特殊的过程.要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现

    继承概念的实现方式主要有2类:实现继承、接口继承.

    实现继承是指使用基类的属性和方法而无需额外编码的能力

    接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法)

  3)多态:多态是通过父类调用子类的接口

  4)继承示例代码

  

# -*- coding:utf-8 -*-
__author__ = ‘shisanjun‘

class SchoolMember(object):

    menber=0 #公有属性
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
        self.enrool() #每个子类都运行

    def enrool(self):
        print(‘%s has enroll‘ %self.name)
        SchoolMember.menber+=1 #累计增加,不能写this.menber+=menber这样写只会在子类调用的时候加1,没有传到父类

    def tell(self): #打印所有用户信息,实现如下
        print("-----info %s-----" %self.name)
        for v,k in self.__dict__.items(): #返回子类的 所有成员属性的字典
            print("%s:\t%s" %(v,k))

    def __del__(self):
        print("%s has del" %self.name)
        SchoolMember.menber-=1

class Teacher(SchoolMember):

    def __init__(self,name,age,sex,salary,course):
        #SchoolMember.__init__(self,name,age,sex) #经典类写法==SchoolMember.__init__(self,name,age,sex)
        super(Teacher,self).__init__(name,age,sex ) #新类式类写法
        self.salary=salary
        self.course=course

    def teach(self):
        print("the teacher course",self.course)

class Student(SchoolMember):

    def __init__(self,name,age,sex,tuition,course):
        SchoolMember.__init__(self,name,age,sex)
        self.tuition=tuition
        self.course=course

    def pay_tuition(self):
        print("the student pay ",self.tuition)

t=Teacher("shi",23,"F",15000,"python")
s=Student("san",26,‘M‘,3000,"python")

t.tell()
s.tell()

"""
C:\Python36\python.exe F:/python运维开发/day7/类的继承2.py
shi has enroll
san has enroll
-----info shi-----
name:    shi
age:    23
sex:    F
salary:    15000
course:    python
-----info san-----
name:    san
age:    26
sex:    M
tuition:    3000
course:    python
shi has del
san has del

Process finished with exit code 0

"""

  总结:

时间: 2024-11-03 21:51:51

python基础学习日志day6-面向对象的相关文章

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

python基础学习日志day5---os模块

python os模块提供对操作系统进行调用的接口. # -*- coding:utf-8 -*-__author__ = 'shisanjun' import os print(os.getcwd())#获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("F:\python运维开发\day4")#改变当前的工作目录:相当于shell下cdprint(os.getcwd())#结果F:\python运维开发\day4 os.chdir(os.curdir)#返回

python基础学习日志day5---logging模块

很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用. 最简单用法 1 2 3 4 5 6 7 8 import logging logging.warning("user [alex] attempt

python基础学习日志day8-异常处理

一.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面. 1)常用方式: try: pass except Exception as e: pass 一直尝试try中的代码,如果遇到错误和except中异常相同,就执行except中代码,如果和except没有相同,还是会抛出异常 # -*- coding:utf-8 -*- __author__ = 'shisanjun' names=['1','2','3'] data={} try:

python基础学习日志day7-类的反射

1)python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr, 改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. # -*- coding:utf-8 -*- __author__ = 'shisanjun' class Foo(object): def __init__(self): self.name="s" def func(self): return 'func' obj=Foo() #

python基础学习日志day7-类的起源

Python中一切事物都是对象. class Foo(object): def __init__(self,name): self.name = name f = Foo("alex") f对象是FOO类的一个实例,Foo类对象是type类的一个实例. print(type(f)) print(type(foo)) # -*- coding:utf-8 -*- __author__ = 'shisanjun' class Foo(object): def func(self): pri

python基础学习日志day5--re模块

常用正则表达式符号 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) '$' 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以 '*' 匹

python基础学习日志day5--subprocess模块

可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen*          --废弃 popen2.*           --废弃 commands.*      --废弃,3.x中被移除 以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能 call 父进程等待子进程完成返回退出信息(returncode,相当于Linux exit code) 执行命令,返回状态码,shell=True是表示

python基础学习日志day5--hashlib模块

hashlib模块用于加密操作,代替了md5和sha模块, 主要提供SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. # -*- coding:utf-8 -*- __author__ = 'shisanjun' import hashlib m=hashlib.md5() #使用MD5算法 m.update(b"hello") #必须加b,申明为byte m.update(b"It is me") print(m.dige