python 面向对象介绍

1、python 面向对象的主要特性。主要有类、对象。三大特点:封装、继承、多态。本次主要介绍内容:属性、方法、构造函数、析构函数。私有方法、私有属性。

oop 是使用类和对象来实现对真是世界的描述。万事万物皆可为类。基于面向对象的程序使人更加容易理解的你逻辑。提高开发效率

class 类。对具有相同属性的对象的抽象。可以理解为模板。在类中定义了这些对象共同拥有的属性和方法。(上帝创造地球的模板)

object 对象。对象是类的实例化。一个类可以实例化多个对象。每个对象可以具有不同的属性。例如人。人与人既有共同属性。也有不同属性。

封装。在内部调用函数。对外部是透明的(对外部不可见)。

 继承。子类可以自动继承父类的属性和方法

多态。一个接口,多重实现。(比喻老板说开始工作,销售部开始销售工作。技术部开始的开发工作)

2、面向对象。类的简单定义。和对象实例化。

class  dog:
    def __init__(self,name):
        self.name =  name
    def bulk(self):
        print("wang !!!!!!! %s"%(self.name))

dog1 =dog("test1")
dog2 = dog("test2")

dog1.bulk()
dog2.bulk()

3、写代码原则。

  一、重复代码是非常不好的行为

二、写的代码经常变更

4、类初始化深入理解: 对象创建的过程。每次创建一个对象相当于开辟一块内存空间如r1。每次在调用函数时候。实际相当于将r1作为一个参数传递给类的函数

(记住:是调用类的函数。所有对象公用。并不是每个对象的内存空间都会复制这个函数体,节省内存空间)

class role :
    def __init__(self,name,wepon,life_value= 00):
        #构造函数
        #在实例化时候。做一些初始化工作
        self.name = name
        self.wepon = wepon
        self.life_value = life_value
    def get_shot(self):
        print("I got shot")

# 在内存中是完全不同的两个对象
#role("xiajinqi","fireball")
#
r1 = role("xiajinqi","fireball")
‘‘‘
r1 = role("xiajinqi","fireball")
1、申请一个内存地址r1.
2、r1传递给类role
3、role.__init__(r1,"xiajinqi","fireball")
备注:创建一个对象。相当于开辟一块内存空间。里面会存储变量等相关值。但是(类函数并没有复制一份,只是在调用时候,
传一个对象的内存地址来做区分不同的对象。好处就是节约内存空间),
如:role.__init__(r1,"xiajinqi","fireball") ,role.__init__(r2,"xiajinqi","fireball") 

‘‘‘

内存存储图:

5、类变量和实例变量。 作用范围。

当某个变量在类和实例中都存在时候。优先取实例变量

class role :
    n = 12345  #类变量,对象共享
    name = "tset"
    def __init__(self,name,wepon,life_value= 00):
        #构造函数
        #在实例化时候。做一些初始化工作
        self.name = name  #实例变量 。未某个对象所独享
        self.wepon = wepon
        self.life_value = life_value
    def get_shot(self):
        print("I got shot")

print(role.n,role.name)
r1=role("ploice1","fireball")
r2=role("ploice2","fireball")

print(r1.n,r1.name) # 当name这个变量在实例和类都存在的。值先从对象开始找。没有时候取类的变量打印值为ploice1
print(r2.n,r2.name)# 当name这个变量在对象和类种都存在的。值先从对象开始找。没有时候取类的变量打印值为ploice2
#
E:\Users\xiajinqi\PycharmProjects\Atm\venv\Scripts\python.exe E:/Users/xiajinqi/PycharmProjects/Atm/bin/test.py
12345 tset
12345 ploice1
12345 ploice2

Process finished with exit code 0

6、实例化以后。变量的修改和删除增加。 特殊说明:对象可以查类变量(实例变量不存在取类变量),但是不能修改和删除类变量。类变量修改只能由自己修改

如:r1.n = 100

.如果n存在,就表示修改。如果n不存在。

class role :
    n = 12345  #类变量,对象共享
    name = "tset"
    def __init__(self,name,wepon,life_value= 00):
        #构造函数
        #在实例化时候。做一些初始化工作
        self.name = name  #实例变量 。未某个对象所独享
        self.wepon = wepon
        self.life_value = life_value
    def get_shot(self):
        print("I got shot")

print(role.n,role.name)

r1=role("ploice1","fireball")
r2=role("ploice2","fireball")
r1.n=‘11111‘  # 相当于实例r1自己给自己创建了一个变量n,r1.n=n。。因此不会改变类变量
print(r1.n) #
print(r2.n)#  # 类变量依旧不能变
print(role.n)
E:\Users\xiajinqi\PycharmProjects\Atm\venv\Scripts\python.exe E:/Users/xiajinqi/PycharmProjects/Atm/bin/test.py
12345 tset
11111
12345
12345

7、类变量修改。类变量修改只能由类自己修改。所有实例都无法直接修改类变量。

并且类变量修改的影响范围为:实例对象中没有改变量,需要调用类变量的实例将受到影响。

class role :
    n = 12345  #类变量,对象共享
    name = "tset"
    def __init__(self,name,wepon,life_value= 00):
        #构造函数
        #在实例化时候。做一些初始化工作
        self.name = name  #实例变量 。未某个对象所独享
        self.wepon = wepon
        self.life_value = life_value
    def get_shot(self):
        print("I got shot")

print(role.n,role.name)

r1=role("ploice1","fireball")
r2=role("ploice2","fireball")
r1.n=‘11111‘  # 相当于实例r1自己给自己创建了一个变量n,r1.n=n。。因此不会改变类变量
print(r1.n) #

# 修改类变量
role.n = 88888
print(r2.n)
print(role.n)

E:\Users\xiajinqi\PycharmProjects\Atm\venv\Scripts\python.exe E:/Users/xiajinqi/PycharmProjects/Atm/bin/test.py
12345 tset
11111
88888
88888

Process finished with exit code 0

8、类变量的作业。例如:国际字段默认为中国。有少量人国际其他国际。所有未中国国际的人可以共用一个内存空间。从而节省内存。

9、析构函数。在实例销毁、结束时候执行。通常用于关闭数据库连接的打开的临时文件关闭等

class role :
    n = 12345  #类变量,对象共享
    name = "tset"
    def __init__(self,name,wepon,life_value= 00):
        #构造函数
        #在实例化时候。做一些初始化工作
        self.name = name  #实例变量 。未某个对象所独享
        self.wepon = wepon
        self.life_value = life_value

    def get_shot(self):
        print("I got shot")

    def __del__(self):
        print("ha game over")

# 程序执行结束后。自动调用
r1=role("ploice1","fireball")
r1.get_shot()
r2=role("ploice1","fireball")
r2.get_shot()

E:\Users\xiajinqi\PycharmProjects\Atm\venv\Scripts\python.exe E:/Users/xiajinqi/PycharmProjects/Atm/bin/test.py
I got shot
I got shot
ha game over
ha game over

python 内存回收机制。当变量销毁时候。会自动回收

class role :
    n = 12345  #类变量,对象共享
    name = "tset"
    def __init__(self,name,wepon,life_value= 00):
        #构造函数
        #在实例化时候。做一些初始化工作
        self.name = name  #实例变量 。未某个对象所独享
        self.wepon = wepon
        self.life_value = life_value

    def get_shot(self):
        print("I got shot")

    def __del__(self):
        print("ha game over")

# 程序执行结束后。自动调用
r1=role("ploice1","fireball")
r1.get_shot()
del r1
r2=role("ploice1","fireball")
r2.get_shot()

E:\Users\xiajinqi\PycharmProjects\Atm\venv\Scripts\python.exe E:/Users/xiajinqi/PycharmProjects/Atm/bin/test.py
I got shot
ha game over
I got shot
ha game over

Process finished with exit code 0

10、类的继承。简单实用

class People :
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s eat" %(self.name))

    def sleep(self):
        print("%s sleep" % (self.name))

class Man(People):
     def game(self):
         print("%s game" % (self.name))

     def sleep(self):
         print("%s man is sleep" % (self.name))  # 覆盖

     def eat(self):
         People.eat(self)  # 先调用父类。然后执行自己的函数体
         print("%s eat" % (self.name))  # 重构

man1 =Man("xiajinqi","19")
man1.sleep()  # 继承父类。
man1.game()   # 玩游戏。自己的类
man1.eat()  #重构

11、多继承和新式类。继承顺序。从左到右。

# 继承优先级,先执行自己的构造方法,再去调用Relation
#class Poeple: 经典类
class People(object) :   #新式类
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self):
        print("%s eat" %(self.name))

    def sleep(self):
        print("%s sleep" % (self.name))

class Relation(object):
    def make_friends(self):  # obj
        print("make  %s"%(self.name))

class Man(People,Relation):  # 新式类鞋码
    def __init__(self, name, age, money):
        super(Man, self).__init__(name, age)
        self.money = money

    def game(self):
         print("%s game" % (self.name))

    def sleep(self):
         print("%s man is sleep" % (self.name))  # 覆盖

    def eat(self):
         People.eat(self)  # 先调用父类。然后执行自己的函数体
         print("%s eat" % (self.name))  # 重构

man1 =Man("xiajinqi","19",‘10000‘)

man1.make_friends()

E:\Users\xiajinqi\PycharmProjects\Atm\venv\Scripts\python.exe E:/Users/xiajinqi/PycharmProjects/Atm/bin/test.py
make fir xiajinqi

Process finished with exit code 0

12、类的继承顺序。广度优先

class shoool(object):
    def __init__(self,addr,name):
        self.addr = addr
        self.name = name
        self.students = []
        self.teacher = []

    def  en_roll(self,obj_student):
        self.students.append(obj_student)
        print("注册学员 %s"  %(obj_student.name))
    def  hire(self,obj_teacher):
        self.teacher.append(obj_teacher)
        print("注册学员 %s" % (obj_teacher.name))

class school_member(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def tell(self):
        pass

class student(school_member):
    def __init__(self,name,age,grade):
        super(student,self).__init__(name,age)
        self.grade = grade

    def tell(self):
        print(‘‘‘
        name:
        age:
        garde:
        ‘‘‘%(self.name,self.age,self.garde))

class teacher(school_member):
    def __init__(self, name,age,salary):
        super(teacher, self).__init__(name,age)
        self.salary = salary

    def tell(self):
        print(‘‘‘
        name:
        age:
        salary:
        ‘‘‘ % (self.name, self.age, self.salary))

shoool1 = shoool("北京","老男孩")
student1 = student("test1","22","一班")
student2 = student("test2","22","二班")

teacher1 = teacher("teacher1","33","2000000")
teacher2 = teacher("teacher2","33","2000000")

shoool1.en_roll(student1)
shoool1.en_roll(student2)

shoool1.hire(teacher1)
shoool1.hire(teacher2)

# 打印所有注册老师

for student in shoool1.students :
    print(student.name)

for teacher in shoool1.teacher :
    print(teacher.name)

13、多态.可以实现。统一接口多种实现。

class am(object):
    def __init__(self,name):
        print("name %s" %(name))

    # 接口
    def am(obj):
        obj.talk()

class dog(am):
    def talk(self):
        print("wangwang")

class cat(am):
    def talk(self):
        print("miaomiao")

dog1 = dog("test1")
cat2 = cat("test1")
am.am(cat2)

14课后练习题目:

角色:学校、学员、课程、讲师
要求:
1、创建北京、上海学校
2、创建linux/python/C++ 3个课程 linxu/python 在北京开。C++在上海开。
3、课程包含。周期、价格。通过学校创建课程。
4、通过学校创建班级。班级关联课程、讲师
5、创建学员时,选择学校。关联班级
6、创建讲师角色时要选择学校
7、提供角色接口
7、1 学员视图,可以注册。交学费。选择班级
7、2 讲师视图。讲师可以管理自己的班级。上课选择班级。查看班级学员列表。修改所管理学员的成绩
7/3 管理视图。创建讲师、创建班级、创建课程
7/4上面所有操作通过pickel序列化保存到文件。

原文地址:https://www.cnblogs.com/xiajq/p/9032943.html

时间: 2024-10-30 10:21:28

python 面向对象介绍的相关文章

Python中模块使用及面向对象介绍

1.模块使用 模块: 模块式pyth1.on组织代码的基本方式 一个python脚本可以单独运行,也可以导入另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module) 所有的点p为文件都可以作为一个模块导入 模块名与脚本的文件名相同,例如我们编写了一个名为hello.pv的脚本则可以在另一个脚本中用import hello.py来导入它 包: python的模块可以按目录组织为包 创建一个包的步骤: 创建一个名字为包名字的目录,在该目录下创建一个__init__.py文件,根据需要在

Python 面向对象class(2)

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

python 面向对象(进阶篇)

上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象

python 面向对象 进阶篇

在上篇<python面向对象>中,简单介绍了python中面向对象的基本知识 在这篇博客中,详细介绍python类的成员,成员修饰符,类的特殊成员. 类的成员 类的成员分为三种:字段,方法和属性 所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份. 字段 字段包括普通字段和静态字段.静态字段,保存在类中.普通字段,保存在对象中. class FOO: country = “中国

Python面向对象编程-封装

1引言 你点击了桌面上的Chrome图标,一个浏览器窗口出现了,输入网址就可以在Internet世界愉快玩耍.这一切是怎么实现的呢?Chromium这个多进程的程序是如何启动各个进程的呢?浏览器主进程(界面进程)启动了哪些线程?如何启动的呢?这些问题一直萦绕在心头,一起来看看源代码吧.本文主要针对Chromium for Mac的源代码,其它操作系统大同小异. 2背景知识 浏览器作为一个应用程序,是以进程的形式运行在操作系统上的.首先,Chromium是一个多进程的应用程序,我们需要了解Chro

Python 面向对象-------补充

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

python 面向对象初级篇

Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强-" 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处. Python while True: if cpu利用率 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘

Python面向对象编程高级特性

***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方*** 1.python作为一种动态语言,他的动态绑定机制允许在运行过程中动态的给class或者对象实例添加方法和属性,这个在静态语言中比如java是很难做到的: 1)动态绑定属性: 2)动态绑定方法 给一个实例绑定的方法对于其他实例和类都是不可见的:(这里也说明给一个实例动态绑定方法必须用MethodType(func, instance)) 但是给类绑

python面向对象进阶(八)

上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象