小案例:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Author:Bert
import sys class Role(object): n="Role_n" #这是类变量
list= []
def __init__(self,name,role, weapon, life_value=100, money=15000):
"""
构造函数;在实例化时做一些类的初始化的工作
self 相当于传role 对象
"""
self.name=name #role1.name=name实例变量(静态属性),作用域就是实例本身
self.role=role
self.weapon=weapon
self.__life_value=life_value #在变量前面加 __ 变成私有属性,只有class里面才可以访问
self.money=money def show_life_value(self):
print("通过class内部方法调用私有属性:%s的血量%s" %(self.name,self.__life_value)) def __private(self):
print("私有方法只有class内部的方法可以调用,必须用self") def shot(self):
""" 类的方法 (动态属性) """
sys.stdout.write("%s通过class内shot方法调用私有方法__private:")
self.__private() def buy_gun(self, gun_name):
print("%s购买%s" % (self.name, gun_name)) def __del__(self):
"""在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作, 如关闭一些数据库连接,关闭打开的临时文件"""
print("析构函数,%s自动销毁"%(self.name)) role1 = Role("Jack","98K","terrorist")
role1.buy_gun("M416自动步枪")
role1.n = "Jack_n" #相当于给role1 这个实例 新增一个实例变量n
role1.list.append("Jack_list") #实例对象修改类里面的字典、列表等复杂的数据类型,其实就是修改类里面的
del role1.weapon #删除实例属性 用 del
role1.show_life_value()# 通过调用class的方法调用私有属性
role1.shot() #通过内部方法调用私有方法
print(role1.n,",",role1.list) role2 = Role("Jone","AK47","police")
role2.n = "Jone_n"
role2.list.append("Jone_list")
print(role2.n,",",role2.list)
print(Role.n,",",Role.list)

运行结果:

Jack购买M416自动步枪
通过class内部方法调用私有属性:Jack的血量100
%s通过class内shot方法调用私有方法__private:私有方法只有class内部的方法可以调用,必须用self
Jack_n , ['Jack_list']
Jone_n , ['Jack_list', 'Jone_list']
Role_n , ['Jack_list', 'Jone_list']
析构函数,Jack自动销毁
析构函数,Jone自动销毁

面向对象的三大特性之一继承

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Author:Bert #class Person: #经典类
class Person(object): #新式类
""" 新式类与经典类 主要体现在多继承的顺序方面 Python3 广度优先 Python2 经典类 深度优先,新式类 广度优先"""
""" 定义一个父类 """
def __init__(self,name,age):
self.name=name
self.age=age
self.friends=[] def eat(self):
print("%s 正在吃饭......"%(self.name))
def talk(self):
print("%s正在说话....."%(self.name)) class Relation(object):
def makfriends(self,obj):
print("%s和%s在交朋友...."%(self.name,obj.name))
self.friends.append(obj) class Man(Person,Relation):
"""子类继承父类Person
多继承,中间用逗号隔开
"""
def __init__(self,name,age,job):
""" 父类构造方法的重构 """
super(Man, self).__init__(name, age)
""" 利用super()重构可以提高代码可修改行 另一种写法 Person.__init__(self,name,age) """
self.job=job def play_game(self):
""" Man 的方法"""
print("%s 正在玩游戏......"%(self.name)) def talk(self):
""" 子类重写父类的方法 """
print("%s已经重写了父类的talk方法"%(self.name)) class Woman(Person):
"""子类继承父类Person""" def huazhuang(self):
""" Woman 的方法"""
print("%s 正在化妆......"%(self.name)) def talk(self):
""" 重写父类方法,但保留父类方法的内容,添加新功能 """
super(Woman, self).talk()
"""另一种 Person.talk(self)"""
print("%s给父类talk方法添加了新功能...."%self.name) man = Man("Jack",25,"Python") #实例化一个Man
woman = Woman("Like",24) ##实例化一个Woman man.eat() #man 调用父类方法
man.play_game() #man 调用自己独有的方法
man.talk() #man 调用改写后的父类方法
man.makfriends(woman)
print("man的朋友:",man.friends[0]) woman.eat() #woman 调用父类方法
woman.huazhuang() #woman 调用自己独有的方法
woman.talk() #woman 调用改写后的父类方法

  运行结果:

Jack 正在吃饭......
Jack 正在玩游戏......
Jack已经重写了父类的talk方法
Jack和Like在交朋友....
man的朋友: <__main__.Woman object at 0x0000029232431780>
Like 正在吃饭......
Like 正在化妆......
Like正在说话.....
Like给父类talk方法添加了新功能....

深度优先与广度优先的图解

  广度优先的顺序为:A-B-C-D-E-F-G-H-I

  深度优先的顺序为:A-B-D-E-I-C-F-G-H

面向对象的三大特性之一多态

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# Author:CarsonLi class Animal(object):
def __init__(self,name):
self.name = name def talk(self):
print("..................") @staticmethod
def animal_talk(obj):
obj.talk() class Dog(Animal):
def talk(self):
print("%s正在叫:汪汪汪..." % (self.name)) class Cat(Animal):
def talk(self):
print("%s正在叫:喵喵喵..." % (self.name)) dog = Dog("金毛")
cat = Cat("波斯猫") """ 一个接口的多种实现 """
Animal.animal_talk(dog)
Animal.animal_talk(cat)

  运行结果:

金毛正在叫:汪汪汪...
波斯猫正在叫:喵喵喵...

  

Python3 面向对象编程的更多相关文章

  1. Python3面向对象编程实例

    /*认真研究完这个实例,理解python面向对象编程的方法*/class Person: """人员信息""" # 姓名(共有属性) nam ...

  2. python3 面向对象编程--类的封装和继承

    #python3import refrom urllib import requestimport os class PosterSpider(object):     def __init__(se ...

  3. Python3 面向对象编程高级语法

    1.静态方法: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:CarsonLi class Dog(object): def __init ...

  4. Python 面向对象编程的一些特征 及 单例模式的实现, 父类方法的调用(python2/python3)

    一.面向对象编程几个特征(封装, 继承,多态) 1.封装:类里面封装函数和变量, 在将类进行实例化成实例对象时进行传参, 从而生成不同的实例对象,增加代码的复用. 2.继承:子类可以继承父类的方法和属 ...

  5. Python3基础(6)面向对象编程、异常处理

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

  6. Python3学习之路~6.2 实例演示面向对象编程的好处

    首先建一个dog类,实例化为3个dog对象,并让它们都叫. class Dog: def bulk(self): print("xiaohuang:wang wang wang !" ...

  7. 简明Python3教程 13.面向对象编程

    简介 (注: OOP代表面向对象编程,OO代表面向对象,以后全部使用英文缩写) 迄今为止我们编写的所有程序都是围绕函数创建的,函数即操纵数据的语句块.这称作面向过程编程. 除此之外还有另一种组织程序的 ...

  8. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  9. python之面向对象编程

    1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...

随机推荐

  1. 解决爬虫浏览器中General显示 Status Code:304 NOT MODIFIED,而在requests请求时出现403被拦截的情况。

    在此,非常感谢 “完美风暴4” 的无私共享经验的精神    在Python爬虫爬取网站时,莫名遇到 浏览器中General显示  Status Code: 304 NOT MODIFIED 而在req ...

  2. 【ADO.NET】ADO.NET知识点

    ADO.NET 是一组向 .NET 程序员公开数据访问服务的类.提供了对各种关系数据.XML 和应用程序数据的访问. 所有的数据访问类位于System.Data.dll中.System.Data包含了 ...

  3. Go语言【第五篇】:Go条件语句

    Go语言条件 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况再执行另外的语句.下图展示了程序语言中条件语句的结构: Go语言提 ...

  4. JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)

    什么是面向对象?面向对象是一种思想. 面向对象可以把程序中的关键模块都视为对象, 而模块拥有属性及方法. 这样如果我们把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.   工厂 ...

  5. JUC包中的分而治之策略-为提高性能而生

    一.前言 本次分享我们来共同探讨JUC包中一些有意思的类,包含AtomicLong & LongAdder,ThreadLocalRandom原理. 二.AtomicLong & Lo ...

  6. Android 内核--Context对象

    Context(在Android中翻译为场景):一个Activity就是一个Context,一个Service也是一个Context,应用程序中有多少个Activity或者Service,就会有多少个 ...

  7. HDU3065:病毒侵袭持续中——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=3065 ———————————————————————————— Problem Description 小t非常 ...

  8. LOJ6342::跳一跳——题解

    https://loj.ac/problem/6342 f[i]表示从i开始跳的期望时间,f[n]=0. 所以f[i]=(f[i]+f[i+1]+……+f[n])/(n-i+1)+1. 移项整理可求f ...

  9. [Leetcode] pascals triangle ii 帕斯卡三角

    Given an index k, return the k th row of the Pascal's triangle. For example, given k = 3,Return[1,3, ...

  10. HDU.2640 Queuing (矩阵快速幂)

    HDU.2640 Queuing (矩阵快速幂) 题意分析 不妨令f为1,m为0,那么题目的意思为,求长度为n的01序列,求其中不含111或者101这样串的个数对M取模的值. 用F(n)表示串长为n的 ...