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

如果下载的源码需要作者授权,请更换源码。本站免费分享资源不会增加授权

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

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

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__中的属性。
本文由(壳先生)整理自网络,如转载请注明出处:https://www.mrshell.com;
本站发布的内容若侵犯到您的权益,请邮件联系 i@mrshell.com 删除,我们将及时处理!
===========================================================================

1. 本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。
2. 本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。
3. 不得使用于非法商业用途,商用请支持正版!不得违反国家法律,否则后果自负!
4. 若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!

=================================================================

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

发表评论

提供最优质的资源集合

立即查看 了解详情