面向对象(初级篇)

1.面向对象简介

  • Python是一门面向对象的编程语言,在Python中所有数据类型都被视为对象
  • 所谓面向对象的语言 ,简单来说就是语言中的所有操作都是通过对象来进行的,对函数进行分类和封装,让开发更快,更好,更强…
  • 面向对象的基本哲学:
    • 世界由具有各自运动规律和内部状态的对象组成,对象之间的相互作用和通讯构成了世界
    • 唯一性:世界上没有两片相同的叶子,也没有两个相同的对象
    • 分类性:分类是对现实世界的抽象
  • 面向对象的三大特性:封装、继承和多态
  • 对于面向对象的编程语言,关注的是对象,而不注重过程,对于面向对象,一切皆对象
  • 面向对象的编程思想,是把所有功能统一保存到相应的对象中,要使用某个功能,直接找到对应的对象即可
  • 面相对象与面向过程的不同:
    • 面向对象的编码方式易于维护,比较容易阅读,容易复用。但是编写的过程中不大符合人们的常规思想,编写相对麻烦。
    • 面向过程将程序分解成一个步骤,往往适用于某个功能,如果实现别的功能,往往复用性较低,但是这种编程思想比较符合人们的常规,容易理解。

2 类(class)

  • 我们之前学习的都是Python的内置对象,但是内置对象不能满足我们的需求,常常需要自定义一些对象
  • 类 可以简单理解为一张图纸,在程序中需要根据类创建对象
  • 类 是用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象共有的属性和方法。对象就是类的实例
  • 如果多个对象通过一个类创建的,我们称这些为一类对象
  • 语法:
class  类名([父类]):
	代码块
  • 类变量(属性):类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体(方法)之外。类变量通常不作为实例变量使用,类变量也叫做属性。
  • 实例变量:定义在方法中的变量,只属于当前实施的类
  • 实例化:创建一个类的实例,类的具体对象
  • 可以向对象中添加变量,对象中的变量称之为属性。 语法: 对象.属性名 = 属性值
  • isintance 检查一个对象是否是一个对象的实例
class MyName():

	name = 'person'
	print('这是自定义的类')

mc =  MyName()
mc.name = 'person'
print(mc.name)

在这里插入图片描述

  • 类也是一个对象,类是用来创建对象的对象
# 定义一个gender类
class gender():


    print('这是一个自定义的类')

mc = gender()

print(mc, type(mc))

print(gender, type(gender))

在这里插入图片描述
其中 mc 就是gender的实例对象,而gender是type的实例对象

3. 类的定义

  • 类的命名规范:自定义的类,类的名字要用大写字母开头,一般使用大驼峰命名法
  • 类包含的属性和方法:
  • 一对象的特征成为“属性”,一个对象的行为成为“方法”。 属性实际上就是变量,方法就是函数,通过调用这些函数来完成某些方法
  • 调用的语法: 对象.方法名()
  • 方法调用与函数调用的区别:函数调用在调用的时候,有几个形参就传递几个实参。如果是方法调用,默认传递一个参数。所以方法中必须定义一个形参。
  • 在类的代码中,我们可以定义变量和函数:
  • 在类中定义的变量,将会成为所有实例的公共属性,所有实例都可以以 对象.属性名()的形式访问
  • 在类中定义的函数,我们成类中定义的函数为方法。该方法通过该类的实例访问,以对象.方法名()的形式访问
class MyClass:
    """
        这是一个简单的类
    """
    a = 12345
    def demo(self):

        return ('Hello World')

# 将此类实例化
x = MyClass()

name = x.a
name1 = x.demo()

print('这是此类的属性', name)
print('这是此类的属性', MyClass.a)
print('这是此类的方法', name1)

在这里插入图片描述

  1. 在未实例化类(x=MyClass())时,只定义了对象的属性和方法,此时还不是一个完整对象,将定义的这些成为类。需要使用类来创建一个真正的对象,这个对象就叫做这个类的实例,也叫做实例对象(一个类可以有无数个实例)
  2. 创建一个对象也叫做类的实例化,即x=MyClass()(此时的X也叫做类的具体对象),一定要注意后面的小括号
  3. 另外赋值操作并不是必须的,但是如果给没有创建好的实例对象赋值,那么这个对象无法使用,因为没有任何引用指向这个实例

4. 参数self

4.1 属性和方法

  • 类中定义的属性和方法都是公共的,任何实例对象都可以访问
  • 属性和方法的查找流程:
  • 当我们调用一个对象的属性时,解析器会在当前对象(实例)中寻找该属性,如果有,则直接返回当前对象的属性值,如果没有,则会在类对象中寻找该属性,如果有,则直接返回,如果没有,则报错
  • 类对象和实例对象都可以保存属性和方法:
    • 如果这个属性(方法)是所有的实例共享的,则应该保存到类对象中
    • 如果这个属性(方法)是某个实例独有的,则应该保存到实例对象中
    • 一般情况下 ,属性保存到实例对象中,而方法保存到类对象中
class MyClass:
    """
        这是一个简单的类
    """
    a = '钢铁侠'
    def demo(self):

        return ('Hello World')

# 将此类实例化
x = MyClass()

x.a = '蜘蛛侠'

name = x.a
name2 = x.a
# name1 = x.demo()

print(x.a)
print(name)
print(name2)

4.2 self

  • self在定义时需要定义,在需要调用时自动传入
  • self 名字并不是规定死的,但是最好使用 self
  • self 总是指调用时的类的实例
class MyClass:

    def fn(self, name):

        self.name = name

    def demo(self):

        # print('我叫{}'.format(self.name))            # 我叫A
                                                       # 我叫B
                                                       # 我叫C
        new_name = ('我叫{}'.format(self.name))
        return new_name
# 生成三个实例对象
a = MyClass()
b = MyClass()
c = MyClass()

a.fn('A')
b.fn('B')
c.fn('C')

print(a.demo())
print(b.demo())
print(c.demo())

# 我叫A
# None
# 我叫B
# None
# 我叫C
# None

从上面看出MyClass类生成了三个实例 a,b,c 。三个实例在调用fn()方法时,通过self 将’A’,‘B’, 'C’ 传给了name。 在调用demo()方法时,也是通过self 找到究竟是哪个对象在调用该方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值