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

本文深入浅出地介绍了Python的面向对象编程,通过实例代码展示了类的创建、实例化、属性和方法的访问,以及构造函数的使用。文章涵盖类的定义、对象的创建和操作,强调了self的重要性,并探讨了私有属性的访问控制。
摘要由CSDN通过智能技术生成

本篇文章给大家带来的内容是浅谈有关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> ''' # 写了__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 ,

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

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__中的属性。

阅读全文

0 个人已赞赞一个收藏 (0)打赏

您入群打赏务必备注QQ号

支付宝扫一扫赞助

微信钱包扫描赞助

分享到:

生成海报

关 注

评论 抢沙发

评论前必须登录!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值