面向对象 :详解

  1. 类(class) :用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
  2. 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用
  3. 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据
  4. 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也成为了方法的重写。
  5. 局部变量:定义在方法中的变量,只作用于当前实例的类。
  6. 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是咋类的其他成员方法之外声明的。
  7. 继承:极易个派生类继承基类的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
  8. 实例化:创建一个类的实例,类的具体对象。
  9. 方法:类中定义的函数
  10. 对象:通过类定义的数据结果实例。对象包括两个数据成员(类变量和实例变量)和方法。
  • 简单的一个实例:

    • class Test:     #类定义i = 123     #直接在类中放属性和属性值def fn(name):#print("输入的名字是:", name)return 'hello,wolrd'x = Test()      #实例化该类
      #访问该类的属性
      print("Test这个类中i的值为:", x.i)            #Test这个类中i的值为: 123
      #x.fn(cassie) 这样调用类中的函数会报错?
      #访问该类的方法
      print(x.fn())
  • _init_() ---构造方法(init前后分别为_ _两个下划线,否则会报错),由于很多类都倾向于将对象创建为有初始状态的,所以类可能会定义一个_int_()

    • def _init_(self):self.data = []
  • 错误提示TypeError: Complex() takes no arguments-----不接收任何参数
  • 类的方法:
    • 在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数:
class People:name = ''age = 0#定义私有属性,私有属性在类外部无法直接进行访问__weight = 0def __str__(self):return self.__weight#定义构造方法def __init__(self, n, a, w):      #self为实例化本身,类似于js的thisself.name = nself.age = aself.__weight = wdef speak(self):print("%s 说:我 %d 岁。"%(self.name, self.age))   '''("%s 说:我 %d 岁。")此时的%s和%d均为参数,行参,需要在后面给他加上实参,需要加%比如("%a 前面为要传入的参数,后面这个是传入的实参"%(self.name ###此时就是实参))'''#实例化
p = People('cassie', 10, 3)
p.speak()
class People:name = ''age = 0sex = 'f'def __str__(self):      #把名字直接展示出来,在直接print实例化对象时return self.name    def __init__(self, name):  #接收参数self.name = name       #修改上面的name属性的值#print('this is start')def like_apple(self):    #需要调用此函数if self.sex == 'f':print('女性爱吃苹果')elif self.sex == 'n':print('男性不爱吃苹果')else:print('没有性别,无法判断')print(self.name, self.age)a = People('cassie')   #实例化
a.like_apple()       #调用自己写的函数
'''
输出结果为:女性爱吃苹果
cassie 0
'''
print(a)   #因为上面写了__str__这个方法,所以在print时,直接返回了名字 
  • 继承:

    • BaseClassName(示例中的基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:
class DerivedClassName(modname.BaseClassName):
#定义一个主类
class people:name = ''age = 0def __init__(self):self.name = nameself.age = agedef speak(self):print("%s 说:我%d 岁了。"%(self.name, self.age))#继承实例,在定义一个类来继承主类
class student(people):grade = ''def __init__(self,name, age, grade):people.__init__(self, name,age)self.grade = grade#复写父类的方法:def speak(self):print("%s 说:我今年%d 岁了,上 %d 年级"%(self.name, self.age, self.grade))#初始化类
s = student('cassie', 10, 3)
#调用该类的方法
s.speak()     #######输出结果为
cassie说我10岁了,上3年级
  • 多继承

    • 需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,Python 从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。
    • class Example(Lei1,Lei2)
#定义一个主类
class People:name = ''age = 0def __init__(self):self.name = nameself.age = agedef speak(self):print("%s 说:我%d 岁了。"%(self.name, self.age))#继承实例,在定义一个类来继承主类
class Student(people):grade = ''def __init__(self,name, age, grade):People.__init__(self, name,age)self.grade = grade#复写父类的方法:def speak(self):print("%s 说:我今年%d 岁了,上 %d 年级"%(self.name, self.age, self.grade))#在定义一个父类
class Speaker():name = ''language = 'c'def __init__(self, name, language):self.name = nameself.language = languagedef speak(self):print("我叫%s ,我说%d 语言"%(self.name, self.language))#多继承
class More(Speaker,Student):a = ''def__init__(self, name, age, grade, language):Student.__init__(self, name, age, grade)Speaker.__init__(self, name, language)test = More('liu', 10, 3, '中文')
test.speak()        #因为这两个类中的方法均定义为speak,所以在调用方法时,默认调用前面父类的方法,所以调用的是Speaker这个类中的方法######输出结果为
我叫刘,我说中文语言
  • 方法重写

    • 在继承时,父类的方法不满足需求时,可以在子类中重写父类中的方法:
class Parent:def method(self):print('调用父类的方法')class Child(Parent):def method(self):       #此时重写了父类中的method这个方法print('调用子类的方法')c = Child()
c.method()###输出结果为
调用子类的方法
  • 类属性与方法:

    • 类的私有属性:

      • __private_attrs(__weight):两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用方法为:self.__pricate_attrs(self.__weight)
    • 类的方法
      • 在类的内部,使用def关键字为类定义一个方法,接收的参数第一个参数必须为self(初始化的类本身)
    • 类的私有方法
      • __method:两个下划线开头,声明该方法只在该类内部使用,还用方法为self.__method
class Test:__siyou_variable = '私有变量'name = '公开变量'def method(self):print(self.__siyou_variable)     #私有变量print(self.name)                 #公开变量d = Test()
d.method()      #初始化类之后,调用类的方法
print(d.name)     #直接输出类中的指定属性的属性值
print(d.__siyou_variable)           #此时为私有属性,不能直接输出结果,所以会报错####一次输出结果为
私有变量
公开变量公开变量
Traceback (most recent call last):File "test.py", line 16, in <module>print (d.__siyou_variable)  # 报错,实例不能访问私有变量
AttributeError: 'Test' object has no attribute '__siyou_variable'
  • 类的专有方法:

    • __init__:构造函数,在生成对象是调用
    • __del__:析构对象,在释放对象时使用
    • __repr__:打印,转换
    • __setitem__:按照索引赋值
    • __getitem__:按照索引取值
    • __len__:获得长度
    • __cmp__:比较运算
    • __call__:函数运算
    • __add__:加运算
    • __sub__:减运算
    • __mul__:乘运算
    • __div__:除运算
    • __mod__:求余运算
    • __pow__:乘方
  • 运算符重载    
    class Vector:def__init__(self, a, b):self.a = aself.b = bdef __str__(self):return 'Vector (%d, %d,)'%(self.a, self.b)def __add__(self):return Vector(self.a + other.a, self.b + other.b)v1 = Vector(2,10)
    v2 = Vector(5,-2)
    print(v1 + v2)##输出结果为
    Vector(7,8)

python --面向对象相关推荐

  1. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  2. 这可能是Python面向对象编程的最佳实践

    作者 | 崔庆才 来源 | 进击的Coder(ID:FightingCoder) Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了 ...

  3. 第八课.Python面向对象(二)

    类的继承和多态 继承和多态与函数有共同的目的,都是为了减少代码的冗余,提高复用的效率: 根据"Python面向对象(一)"的笔记,我现在定义一个Cinema类: #父类 class ...

  4. Python面向对象编程:类继承和其衍生术语

    Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...

  5. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  6. Python 面向对象 基础

    编程范式概述: 面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实 ...

  7. python面向对象类属性_python面向对象之类属性和类方法案例分析

    本文实例讲述了python面向对象之类属性和类方法.分享给大家供大家参考,具体如下: 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 使用面相对象开发, ...

  8. 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结

    前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...

  9. python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!

    原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...

  10. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

最新文章

  1. java 调内存_java内存设置
  2. 十大经典排序算法之插入排序及其二分优化
  3. eclipse下拉框里的选项怎么鼠标单击表判断_领导让我预测下一年销量,怎么办?...
  4. 前端学习(2215):认识react(2)
  5. 三星电子预计第四季度营业利润为9万亿韩元 低于分析师预期
  6. C语言中的多字节字符与宽字符
  7. 安全扫描工具 Netsparker
  8. 集群语言 Python 入门 脚本工具
  9. 有哪些好用的游戏加速器推荐?
  10. 2021年6月程序员薪资出炉,平均薪资15302元
  11. win7下MeGUI压片无声、卡死、音画不同步、无法转码、无法硬解的解决办法
  12. 手机怎么把图片转成PDF格式?这个方法很好用
  13. 互联网广告的形式表现有哪几种?
  14. RPA---Uipath Try Catch
  15. Linux系统下操作Oracle数据库
  16. iphone无线服务器未响应,iphone8无限转圈黑屏强制关机没反应(解决死机黑屏无法开机的3种方式)...
  17. 程序员好几年才能成为架构师_成为更好的企业架构师
  18. ThingsBoard使用规则链将设备信息转发至外部mqtt
  19. gt2怎么与微信连接不上服务器,华为WATCH GT2收不到通知消息怎么办?收不到短信微信消息的解决方...
  20. 构建告警管理可观察性智能平台

热门文章

  1. UI设计灵感|购物界面更有吸引力
  2. 一张壁纸就是一段故事,壁纸控的找图不难!
  3. 设计灵感|简单的几何图形还能这么用在网页设计中!
  4. PSD分层情人节海报模板,让人眼前一亮
  5. 超前促销创意PSD分层电商海报,紧抓住消费冲突视觉力!
  6. 国潮宫廷中国风文创包装品牌样机
  7. 中秋节PSD分层模板|电商营销借势促销,快快收藏!
  8. python中文字符串排序问题_Python字符串排序
  9. easyui打开新的选项卡_Jquery Easyui选项卡组件Tab使用详解(10)
  10. hashmap底层原理_周末自己动手撸一个 HashMap,美滋滋