Python中关于面向对象概念的详细讲解

面向对象编程的2个非常重要的概念:
类和对象

对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类。

类用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

类是由三部分构成:

类的名称
类的属性
类的方法

格式如下:

# 类名
class Func(object):
    # 类的属性
    i=123
    # 类的方法
    def f(self):
        print('6666')

# 实例化类
a=Func()
# 访问类的属性
print(a.i)
# 调用类的方法
a.f()

object 是Python 里所有类的最顶级父类;
类名 的命名规则按照"大驼峰命名法";
f 是一个实例方法,第一个参数一般是self,表示实例对象本身,当然了可以将self换为其它的名字,其作用是一个变量 这个变量指向了实例对象

魔法方法

1.init

Python 的类里提供的,两个下划线开始,两个下划线结束的方法,就是魔法方法,init()就是一个魔法方法,通常用来做属性初始化 或 赋值 操作(作用)。
如果类面没有写__init__方法,Python会自动创建,但是不执行任何操作
如果为了能够在完成自己想要的功能,可以自己定义__init__方法
所以一个类里无论自己是否编写__init__方法 一定有__init__方法

案例:

# 类名
class Func(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
    # 类的属性
    i=123
    # 类的方法
    def f(self):
        print('我的名字叫%s,今年%d岁了'%(self.name,self.age))

# 实例化类
a=Func('大飞',24)
# 访问类的属性
print(a.i)
# 调用类的方法
a.f()

init(self)中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)中出了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)

注意:
1). 在类内部获取 属性 和 实例方法,通过self获取;
2). 在类外部获取 属性 和 实例方法,通过对象名获取。
3). 如果一个类有多个对象,每个对象的属性是各自保存的,都有各自独立的地址;
4). 但是实例方法是所有对象共享的,只占用一份内存空间。类会通过self来判断是哪个对象调用了实例方法。

2.str

str 如果一个类中定义了__str__方法,在打印对象时,默认输出该方法的返回值,没有定义会返回对象的地址

class Func(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age

a=Func('大飞',24)
print(a)

调用__str__方法,输出结果是该方法的返回值

class Func(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __str__(self):
        return '我的名字叫%s,今年%d岁了'%(self.name,self.age)

a=Func('大飞',24)
print(a)

总结:实例化对象时会调用__str__()方法,如果没有定义__str__()方法会打印一个对象的地址,如果定义__str__()并且有返回值,就会打印其中的返回值

3.del

当删除对象时,python解释器会默认调用一个方法,这个方法为__del__()方法

class Dog(object):
    def __init__(self,name):
        self.name =name
        print("__init__方法被调用")
    def __del__(self):
        print("__del__方法被调用")
        print("python解释器开始回收%s对象了" % self.name)
p = Dog('Bob')
del p

到此这篇关于Python中关于面向对象概念的详细讲解的文章就介绍到这了,更多相关Python 面向对象 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python面向对象实现方法总结

    总结 类的定义 很久以前,语言都是面向过程的,经过计算机科学家的探索,出现了面向对象.面向对象可以解释生活中很多东西.比如人,人就是个对象,有参数,比如器官,身高啥的,有方法,比如跑步,学习等.不扯那么多了. 对象就是类,在python中用class定义类.类里面有两大部分,一部分是属性,一部分是方法.比如,定义一个人对象.这个人的属性就是身高,体重,方法就是说话. #定义人 class Person: #定义属性 height=0 weight=0 #构造函数 def __init__(sel

  • Python面向对象之成员相关知识总结

    1.成员 1.1 变量 实例变量,属于对象,每个对象中各自维护自己的数据. 类变量,属于类,可以被所有对象共享,一般用于给对象提供公共数据(类似于全局变量). class Person(object): country = "中国" def __init__(self, name, age): self.name = name self.age = age def show(self): # message = "{}-{}-{}".format(Person.co

  • 浅析Python面向对象编程

    概述 很多人接触Python,都是从爬虫开始,其实很多语言都可以做爬虫,只是Python相对其他语言来说,更加简单而已.但是Python并不止于爬虫,在人工智能,科学计算等方面的应用更加广泛.古人云:万丈高楼平地起,要想有长足的发展,打好基础很重要,本文主要讲解Python的面向对象相关知识,仅供学习分享使用,如有不足之处,还请指正. 面向对象的特征 类:用来描述相同事物的特征的集合,如:Person 类,表示人,具有人的属性和特征. 对象:通过类定义的具体的实例,如:zhangsan 表示一个

  • 简单谈谈Python面向对象的相关知识

    一.私有化 上篇说过封装,既将我们不想让别人看到代码的内容,但是又需要用到的内容,通过类内部调用来实现调用. 说到这里却不得不提一下上篇的: class Person(object): def __init__(self, name, age): self.xxx = name self.xxxx = age 这里面self后面的名字,是可以自己随意命名的,上一篇和后面一样只是为了好记忆罢了 只要你记得住,便是颠倒也是无事 1.1 属性私有化 何为属性私有? 举个例子便是:你的私房钱,你的手机电

  • python中什么是面向对象

    用面向对象的思维解决问题的重点 当遇到一个需求的时候不用自己去实现,如果自己一步步实现那就是面向过程:应该找一个专门做这个事的人来做. 面向对象(object-oriented ;简称: OO) 至今还没有统一的概念 我们可以把它定义为: 按人们 认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析.设 计.实现软件的办法. 面向对象编程(Object Oriented Programming-OOP) 是一种解决软件复用的设计和编程方法. 这种方法把软件系统中相近

  • Python中关于面向对象概念的详细讲解

    面向对象编程的2个非常重要的概念: 类和对象 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类是由三部分构成: 类的名称 类的属性 类的方法 格式如下: # 类名 class Func(object): # 类的属性 i=123 # 类的方法 def f(self): print('6666') # 实例化类 a=F

  • Python中turtle绘图模块的详细讲解

    目录 前言 turtle基本概念 调出模块 引用turtle模块(库)方法 例.写字函数write()的使用 使用Python的turtle(海龟)模块画图步骤 总结 前言 turtle库是Python语言中一个很流行的绘制图像的函数库,可以轻松地绘制出精美的形状和图案,很适合用来引导孩子学习编程. turtle模块(module)是Python语言中的标准模块(内置模块)之一. [在Python中,模块也称作库(Library)] turtle基本概念 画布(canvas),turtle模块展

  • Python中关于面向对象私有属性方法的详细讲解

    目录 1.私有属性和私有方法 私有属性: 私有方法: 类部调用私有属性和私有方法 子类不能继承父类私有属性和方法 实例属性(对象属性) 通过实例(对象)去修改类属性 2.修改私有属性的值 3.类属性和实例属性 4.类方法和静态方法 类方法: 静态方法: 实例方法 5.__new__方法 6.单例模式 福利 1.私有属性和私有方法 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理: 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了: 对类的属性和方法增加 访问权限控

  • Python中关于面向对象中继承的详细讲解

    目录 1.继承 2.单继承 3.多继承 4.子类重写父类的同名属性和方法 5.子类调用父类同名属性和方法 6.多层继承 7.调用父类方法super() 8.案例 1.继承 在程序中,继承描述的是多个类之间的所属关系. 如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里. 那么类A就是基类,也叫做父类:类B就是派生类,也叫做子类. 案例: # 父类 class A(object): def __init__(self): self.num=50 def print_num(s

  • 浅谈python中的面向对象和类的基本语法

    当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀.我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个坑是如此之大,犹豫再三,还是只捡一下重要的内容来讲吧,不足的内容只能靠大家自己去补充了. 惯例声明一下,我使用的版本是 python2.7,版本之间可能存在差异. 好,在开讲之前,我们先思考一个问题,看代码: 为什么我只创建是为 a 赋值,就可以使用一些我没写过的方法? 可能会有小伙伴说:因为 a

  • Python文件的操作示例的详细讲解

    1. 文件的读写原理: 文件的读写称为I/O操作. 操作原理: .py文件是用解释器去运行,调用OS操作系统的资源,去操作磁盘上的文件. 操作流程: 在去操作一个文件的文件的时候,首先打开或者创建一个文件,进行读或者写. 读: 从文件拿到内存当中来 写:把内存的文件放入文件中 最后进行关闭资源. 内置函数: open() 可以创建或者打开一个文件 语法规则: file=open(filename [mode,encoding] 打开模式默认为只读 默认文本中的字符编码格式为gbk # 作者:互联

  • Python attrs提高面向对象编程效率详细

    目录 1.attrs的使用 2.验证器 3.转换器 前言: Python是面向对象的语言,一般情况下使用面向对象编程会使得开发效率更高,软件质量更好,并且代码更易于扩展,可读性和可维护性也更高.但是如果在一个较大的项目中,如果实体类非常多并且有非常复杂的属性,你就会逐渐觉得Python的类写起来是真·"累".为什么这样说,看下下面这个Box类,属性有长(length).宽(width).高(hight): class Box: def __init__(self, length, wi

  • Python反向传播实现线性回归步骤详细讲解

    目录 1. 导入包 2. 生成数据 3. 训练数据 4. 绘制图像 5. 代码 1. 导入包 我们这次的任务是随机生成一些离散的点,然后用直线(y = w *x + b )去拟合 首先看一下我们需要导入的包有 torch 包为我们生成张量,可以使用反向传播 matplotlib.pyplot 包帮助我们绘制曲线,实现可视化 2. 生成数据 这里我们通过rand随机生成数据,因为生成的数据在0~1之间,这里我们扩大10倍. 我们设置的batch_size,也就是数据的个数为20个,所以这里会产生维

  • C语言哈希表概念超详细讲解

    目录 1. 哈希概念 2. 哈希冲突 3. 哈希实现 3.1 闭散列(哈希表) 3.1.1 闭散列的细节 3.1.2 优化后的闭散列 3.2 扩散列(哈希桶) 3.2.1 扩散列的细节 4. 哈希表和哈希桶的比较 5. 结尾语 1. 哈希概念 哈希其实在学排序时已经用过了,就是计数排序.计数排序也是用的一种映射关系. 比如对此数组进行 计数排序 :1 1 9 9 9 3 3 8 8 我用的是绝对映射 ,所以开辟的数组空间 它的大小 必须 能映射到 最大的元素. 但是 对于哈希来讲,可以用决定映射

  • 对Python中for复合语句的使用示例讲解

    当Python中用到双重for循环设计的时候我一般会使用循环的嵌套,但是在Python中其实还存在另一种技巧--for复合语句. 简单写一个小程序,用于延时循环嵌套功能如下: #!/usr/bin/python defFunc1(ten_num,one_num): for i in range(ten_num): for j in range(one_num): print(10 * i + j) Func1(2,5)的执行结果如下: 0 1 2 3 4 10 11 12 13 14 以上是一个

随机推荐