翼度科技»论坛 编程开发 python 查看内容

14面向对象

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
面向对象

面向对象编程介绍

面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计思想。
需要注意的是,与之对应的是面向过程编程思想。实际上,能够使用面向对象编程思想实现的程序,也都能通过面向过程完成。只是看哪种思想更适合当前开发需求。
面向过程与面向对象区别

面向过程:根据业务逻辑从上到下写代码  
面向对象:将数据与函数绑定到一起,进行封装。减少重复代码的重写过程
类和对象


  • 类:具有同一特征的事物,是抽象的,不是真实存在的。用来描述具有相同属性和方法的对象的集合。
  • 对象:某一个具体事物的存在,在现实世界中可以是看得见摸得着的。
注意:开发中,先有类,再有对象。
类的构成

类由3个部分构成

  • 类的名称:类名
  • 类的属性:一组数据
  • 类的方法:允许对类进行操作的方法
注意:类名通常采用驼峰式命名方式,尽量让字面意思体现出类的作用。
  1. # 类的定义
  2. class 类名称:
  3.     类的属性(成员变量)
  4.    
  5.     类的行为(成员方法)
复制代码
创建对象

python中,可以根据已经定义的类去创建出一个个对象
创建对象的格式为:
  1. # 创建类对象的语法
  2. 对象 = 类名称()
复制代码
类与对象的使用
  1. # 定义
  2. class 类名:
  3.     def 方法名(self,参数):  # 类中函数:称为方法
  4.         pass
  5.         
  6. # 执行
  7. s = 类名()         # 创建对象(实例) 这个过程就是实例化
  8. s.方法名(参数)     # 调用类中方法
复制代码
self参数

在类当中定义方法时,会发现系统帮我们自动创建了self参数,并且在调用对象的该方法时,也无需传入self参数。
self的两个概念:

  • self本身是形参
  • self就是当前对象本身
  1. class Student:
  2.     def printinfo(self):
  3.         print(lisi.name, lisi.age)
  4.         print(self.name, self.age)   # 这里会高亮,对象的属性是暴露在外面的
  5.         print(lisi)
  6.         print(self)
  7. lisi = Student()  # 对象
  8. # 对象的属性是暴露在外面的
  9. lisi.name = '李四'
  10. lisi.age = 38
  11. lisi.printinfo()
  12. """
  13. 李四 38
  14. 李四 38
  15. <__main__.Student object at 0x000002E5A099B208>
  16. <__main__.Student object at 0x000002E5A099B208>
  17. 说明在类中printinfo()方法中,lisi和self是等价的
  18. """
复制代码
魔法方法

在Python的类中,以两个下划线开头、两个下划线结尾的方法,如常见的 :__init__()、__str__()、__del__()等,就被称为「魔术方法」(Magic methods)。之所以会叫魔法方法原因是这些方法都是到达某个条件自动触发,无需调用,如果希望根据自己的程序定制特殊功能的类,那么就需要对这些方法进行重写。使用这些「魔法方法」,我们可以非常方便地给类添加特殊的功能。
__init__()

_init_() :初始化对象
  1. class My_Phone():
  2.     def __init__(self):
  3.         self.width = 10
  4.         self.heigth = 15
  5.     def main(self):
  6.         print(self.width)
  7.         print(self.heigth)
  8. apple = My_Phone()
复制代码
_init_() ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤
_init_(self) 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去。


  • 带参数的init
⼀个类可以创建多个对象,对不同的对象设置不同的初始化属性,传参即可。
  1. class My_Phone():
  2.     def __init__(self,width,heigth):
  3.         self.width = width
  4.         self.heigth = heigth
  5.     def apple_phont(self):
  6.         print("苹果手机的宽为:",self.width)
  7.         print("苹果手机的高为:",self.heigth)
  8.     def huawei_phont(self):
  9.         print("华为手机的宽为:",self.width)
  10.         print("华为手机的高为:",self.heigth)
  11. apple = My_Phone(10,20)
  12. apple.apple_phont()
复制代码
_str_()

当使⽤print输出对象的时候,默认打印对象的内存地址。如果类定义了 str ⽅法,那么就会打印在这个⽅法中 return 的数据。
_str_():解释类的属性或作用
  1. class Demo():
  2.     def __init__(self, width, heigth):
  3.         self.width = width
  4.         self.heigth = heigth
  5.     def __str__(self):
  6.         return f"你这个手机的宽是{self.width},高度是{self.heigth}"
  7. a = Demo(10,20)
  8. print(a)  # 你这个手机的宽是10,高度是20
  9. # 若没有__str__()方法,则会打印对象的内存地址:<__main__.Demo object at 0x000001E6FC7A7198>
复制代码
_del_()

当删除对象时,python解释器也会默认调⽤ __del__() ⽅法。在对象销毁的时候被调用,当对象不再被使用时,del()方法运行:
  1. class Demo():
  2.     def __init__(self, width, heigth):
  3.         self.width = width
  4.         self.heigth = heigth
  5.     def __del__(self):
  6.         print("对象已经删除")
  7. a = Demo(10,20)
  8. # __del__方法
  9. class Demo:
  10.     def __del__(self):  # 当由该类创建的实例对象,被删除或者说在内存中被释放,将会自动触发执行。
  11.         print("被释放了!")
  12. d = Demo()
  13. print("*" * 20)
  14. # del d  # 相当于提前执行了del方法
  15. print("*" * 20)
复制代码
类属性与方法

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问
  1. class Demo():
  2.     __num = 0  # 私有属性
  3.     result = 0  # 公开属性
  4.     def count(self):
  5.         self.__num += 1
  6.         self.result += 1
  7.         print(self.__num)
  8.     def getnum(self):
  9.         return self.__num
  10. run = Demo()
  11. run.count()
  12. print(run.result)
  13. # print(run.__num)    # 报错,实例不能访问私有变量
  14. __num = run.getnum()
  15. print(__num)
复制代码
类的私有方法
  1. class func:
  2.     def fun1(self):
  3.         print("1")
  4.     def __fun2(self):
  5.         print("2")
  6.     def fun3(self):
  7.         return (self.__fun2())
  8. f = func()
  9. f.fun1()
  10. # f.__fun2()
  11. f.fun3()
  12. # 强行调用类的私有方法
  13. # 对象._类名__私有属性
  14. print(f._func__fun2)  # 不建议使用
复制代码
python中没有真正意义上的私有
实例属性
  1. # 实例属性
  2. class Province:
  3.     def __init__(self, country, province):
  4.         self.country = country
  5.         self.province = province
  6.     def print_info(self):
  7.         print(self.country, self.province)  # 通过self去访问  这个要方便很多
  8.         print(zs.country, zs.province)   # 通过每个对象去访问
  9. zs = Province("中国", "湖南")
  10. zs.print_info()
  11. ls = Province("中国", "湖北")
  12. ls.print_info()
复制代码
实例方法
  1. class Demo:
  2.     def __init__(self):
  3.         self.name = "张三"
  4.     # 实例方法  
  5.     def fun1(self):
  6.         print(self.name)
  7. a = Demo()
  8. a.fun1()
复制代码
来源:https://www.cnblogs.com/daguo118/p/17317557.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具