IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python学习- 面向对象编程 -> 正文阅读

[Python知识库]python学习- 面向对象编程

一级目录

二级目录

三级目录

面向对象编程

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

python面向对象

在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

面向对象 VS 面向过程 print_score.py
面向对象的设计思想是抽象出Class,根据Class创建Instance。
面向对象的抽象程度又比函数要高,因为一个Class既包含数据,又包含操作数据的方法。

类和实例

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

创建class和实例(classAndInstance.py)

class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。

class Student(object):
    pass

zhangsan = Student()
zhangsan.name="zs"
print(zhangsan)   # <__main__.Student object at 0x000001905B63C6A0> 
print(zhangsan.__dict__)  # {'name': 'zs'}
创建实例 

类名():bart = Student()
自由地给一个实例变量绑定属性:bart.name=“bart” (name属性只绑定当前的bart实例)

init方法

类可以起到模板的作用, 由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去. (类似于java成员变量)

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

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

类函数

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

数据封装

面向对象编程的一个重要特点就是数据封装。通过函数来访问这些数据.。这些封装数据的函数是和类本身是关联起来的,我们称之为类的方法

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


class Student(object):
    # 绑定name, score属性
    def __init__(self, name, score):
        self.__name = name
        self.__score = score
    # 类函数    
    def print_name(self):
        print("%s's name is %s" %(self.__name, self.__name))
        
    def get_grade(self):
        if self.__score >= 90:
            return 'A'
        elif self.__score >= 60:
            return 'B'
        else:
            return 'C'
        
        
bart = Student("bart",90)
bart.print_name()
print(bart.get_grade())     # get方法访问私有属性
print(bart._Student__name)  # 实例名._Class__xxx访问私有属性

成员变量

  1. 例的变量名如果以__xx开
  2. 头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问. self.__name .通过使用set__name(), get__name()方法进行赋值和访问
  3. 在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的
  4. _xxx变量也请视为私有变量
  5. 私有变量__xxx, 被python解释器编译为_Class__xxx, 可以通过访问实例._Class__xxx

class Student(object):
    def __init__(self, name, gender):
        self.__name = name
        self.__gender = gender

    def get_gender(self):
        return self.__gender
    
    def set_gender(self,gender):
        self.__gender = gender

继承和多态

对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。

对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了

获取对象信息

一个对象的引用时,如何知道这个对象是什么类型、有哪些方法

使用type()

判断基本类型, 引用类型, 函数
判断一个对象是否是函数怎么办? 使用types模块中的常量

使用isinstance()

对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用isinstance()函数。

使用dir()

如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法:

实例属性和类属性

实例属性会覆盖类属性, 建议实例属性不能与类属性相同. 实例属性在实例销毁时销毁

def demo_fun():
        pass
zhangsan=Student("zhangsan", 50)
print(type("123"))    
print(type(zhangsan))    
print(type(123))  
print(type(demo_fun))    
import types
print(types.FunctionType==type(demo_fun))


print("if 'a' is str: %s" % isinstance('a', str) )
print("if (1,2,3) is a list: %s" & isinstance((1, 2, 3), (list, tuple)))

print("str's field:" + dir('ABC'))
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:26:58  更:2022-02-26 11:29:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:21:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码