0

0

浅谈有关python的面向对象编程(代码示例)

青灯夜游

青灯夜游

发布时间:2018-10-29 17:36:31

|

3043人浏览过

|

来源于博客园

转载

本篇文章给大家带来的内容是浅谈有关python面向对象编程(代码示例)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

一、第一个案例---创建类

#__author:"吉"
#date: 2018/10/27 0027
#function:

# 设计类:
'''
类名:首字母大写,见名思意
属性:驼峰原则
行为:见名思意,驼峰法
说明:类不占空间,实例化对象占用空间!
'''

# 格式,object是父类,超类
'''
类名(object):
    属性
    行为
'''
class Peoson(object):
    name = 'zhanglei'
    age = 24
    weight = 70

    def run(self):
        print("跑!")
    def eat(self):
        print('吃')

二、使用类实例化对象

#__author:"吉"
#date: 2018/10/27 0027
#function:


# 设计类:
'''
类名:首字母大写,见名思意
属性:驼峰原则
行为:见名思意,驼峰法
说明:类不占空间,实例化对象占用空间!
'''

# 格式,object是父类,超类
'''
类名(object):
    属性
    行为
'''


class Peoson(object):
    name = 'zhanglei'
    age = 24
    weight = 70

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name


# 实例化对象
'''
格式:对象名= 类名(参数列表信息)
'''
peoson1 = Peoson()
print(peoson1.name,peoson1.age,peoson1.weight)
print(peoson1.eat())
print(peoson1.run())

# 原理
'''
变量是在栈区,对象是在堆区。

'''

三、访问对象的属性和方法

#__author:"吉"
#date: 2018/10/27 0027
#function:

# 设计类:
'''
类名:首字母大写,见名思意
属性:驼峰原则
行为:见名思意,驼峰法
说明:类不占空间,实例化对象占用空间!
'''

# 格式,object是父类,超类
'''
类名(object):
    属性
    行为
'''


class Peoson(object):
    name = 'zhanglei'
    age = 24
    weight = 70

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name


# 实例化对象
'''
格式:对象名= 类名(参数列表信息)
'''
peoson1 = Peoson()

# 访问属性
'''
变量是在栈区,对象是在堆区。

'''
print(peoson1.name,peoson1.age,peoson1.weight)
peoson1.name = 'jiji'
peoson1.age = 33
peoson1.weight = 90

print(peoson1.name,peoson1.age,peoson1.weight)

peoson1.changeName('lala')

print(peoson1.name,peoson1.age,peoson1.weight)

四、构造函数

#__author:"吉勇佳"
#date: 2018/10/27 0027
#function:

'''
构造函数:__init__() 是在创建类的时候自动调用,不写出这个
        构造函数的话,默认是一个空的构造函数什么页不执行。

'''

class Peoson(object):
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

# 实例化对象
p1 = Peoson("jiyongjia",24,177,78)

print(p1.name,p1.age,p1.height,p1.weight)
p1.changeName('zhanglei')
print(p1.name,p1.age,p1.height,p1.weight)

# self 原理
'''
1、哪个对象调用,self就代表那个对象。 
'''

五、self.__class__()的使用创建实例与析构函数

class Peoson(object):
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
    # 这里是析构函数
    def __del__(self):
        print("我是析构函数")


    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

    # 创建对象函数  self.__class__ 是代表类名的
    def createObj(self,name):
        p=self.__class__(name,24,56,89)
        print(p.name,p.age,p.weight,p.height)


# 即 执行p1的一个方法即可创建新的对象。
p1 = Peoson("丽丽",33,53,222)
print(p1.name,p1.age,p1.height,p1.weight)
p1.createObj("狗熊")

'''
输出:丽丽 33 53 222
狗熊 24 89 56
我是析构函数
我是析构函数
'''
print(p1.name)

六、__str__()与__repr__()比较

'''
重写
__str__()
    str方法是给用户用的,用于返回用户需要的结果信息、
__repr__()
   如果换成__repr__()是得到与str相同的结果。是在黑屏终端直接敲对象名再回车的方法
    注意:在没有str方法但是有repr的时候,repr 就相当于str,只是repr用于黑屏终端
'''

class Peoson(object):
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
    # 这里是析构函数
    def __del__(self):
        print("我是析构函数")


    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

    # 创建对象函数  self.__class__ 是代表类名的
    def createObj(self,name):
        p=self.__class__(name,24,56,89)
        print(p.name,p.age,p.weight,p.height)

    # 如果换成__repr__()是得到相同的结果。是在黑屏终端直接敲对象名再回车的方法
    def __str__(self):
        pass
        # return "这里是str"
        # return self.name
        #返回多个值的话用如下
        return "%s-%d-%d" % (self.name,self.age,self.weight)



# 如果要打印出所有的属性信息呢?
p1 = Peoson("嘉嘉",44,222,336)

# 不写def __str__()方法的时候,打印出的是该对象的地址信息
print(p1)
'''
输出:<__main__.Peoson object at 0x0000000002564978>
'''

# 写了__str__()函数是 打印出的自己需要返回的信息数据,此时p1等价于p1.__str__()
print(p1)

七、练习-面向对象作业:

枪设计子弹 设计一次少一个子弹,没子弹了提示无法射击

#__author:"吉"
#date: 2018/10/27 0027
#function:

# 枪设计子弹 设计一次少一个子弹,没子弹了提示无法射击

class Gun(object):
    def __init__(self,name,bulletNum):
        self.name = name
        self.bulletNum = bulletNum

    def shot(self):
        self.bulletNum =self.bulletNum - 1
        if self.bulletNum+1 != 0:
            print("此枪型号是:%s,此次射击成功!子弹减少1发,余量为:%d" %(self.name,self.bulletNum))
        else:
            print("*************射击失败,子弹数为0.已经为您子弹加弹5发!请重新射击!**************")
            self.bulletNum = 5

gun = Gun("AK47",5)
# 射击敌人
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()

'''
输出:
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:4
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:3
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:2
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:1
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:0
*************射击失败,子弹数为0.已经为您子弹加弹5发!请重新射击!**************
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:4
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:3
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:2
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:1
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:0
*************射击失败,子弹数为0.已经为您子弹加弹5发!请重新射击!**************
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:4

'''

 八、如何创建私有属性,在外部无法被访问或者修改

#1 指定私有属性,在外部无法更改:即在属性前加两个下划线 如__money
#2 在python中只有某属性前边有两个下划线的才叫 私有属性,而__money__这种不叫,这是特殊属性。
#3 _money 也不是私有属性,但是当我们看到这样的变量时,我们应该约定俗成的把它看做私有的。本质不是私有,是可以访问的。

# 指定私有属性,在外部无法更改:即在属性前加两个下划线 如__money

class Person(object):
    def __init__(self,name,age,height,weight,money):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
        self.__money= money

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

    # 创建对象函数  self.__class__ 是代表类名的
    def createObj(self,name):
        p=self.__class__(name,24,56,89,10000)
        print(p.name,p.age,p.weight,p.height,p.__money)


# 即 执行p1的一个方法即可创建新的对象。
p1 = Person("丽丽",33,53,222,20000)

print(p1.name,p1.__money)    #此处出错,在外部无法访问私有

如果想在外边访问的话,可以把私有的属性放在方法里面,调用方法,即可访问私有属性。如:

def run(self):
print("跑!")
print("工资",self.__money)

总结:访问或者修改私有属性的时候可以通过固定的两个方法来达到修改和访问,同时,方法中可以对数据进行过滤。

# 对于处理私有属性的方法---设置值的方法
    def SetMoney(self,money):
        if money<0:
            print("输入的钱不能小于0")
        else:
            self.__money = money

    # 对于访问私有属性的方法
    def GetMoney(self):
        return self.__money

# 其实,不能访问__money的原因是因为 python把私有的属性改变为了 _Person__money ,

Python快速入门
Python快速入门

快速学习python书第二版是一本简洁清晰介绍python3的书籍,目标是新学习python 的程序员。这本更新版本囊括了所有python3版本的变化,即python从早期版本到新版本的特性变化 本书一开始用基础但是很有用的程序来传授给读者关于python的核心特性,包括语法,控制流程和数据结构。然后本书使用大型的应用程序包括代码管理,面向对象编程,web开发和转换老版本的python程序到新的版本等等。 忠实于作者的经验十足的开发者的观众,作者仔细检查普通程序特点,同时增加了更多细节关于这些python

下载

立即学习Python免费学习笔记(深入)”;

# 即仍然是可以访问的。但是应该遵循规则,不这么访问,

p1._Person__money = 70    
print(p1.GetMoney())

上述是依然还可以把私有属性进行修改。

父类的文件信息:
class People(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age


子类中调用上边的父类
from people import People

class Student(People):
    def __init__(self,name,age,faceValue):
        # 继承父类的__init__()
        super(Student,self).__init__(name,age)
        self.faceValue = faceValue
stu = Student("玲",22,100)
print(stu.name,stu.age,stu.faceValue)

输出
   玲 22 100


# 总结:
# 我们发现Student类中并无这两个属性信息,这两个属性是调用的父类的__init__中的属性。
# 总结: # 我们发现Student类中并无这两个属性信息,这两个属性是调用的父类的__init__中的属性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

57

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

61

2025.11.27

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

6

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

5

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

8

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

14

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

17

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

2

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

130

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号