小白初识Python——面向对象

写在前面的话:
python一切皆对象!对象?
hey,听说了嘛,程序员天天“处”对象……

面向对象说起来可能有些玄乎,学过了函数,了解了参数,怎么理解面向对象了呢?什么是面向对象?我们先把这个问题放在一边,我们先来谈谈与之相对的面向过程——举个例子,当我们饿了:

买菜-->洗菜-->切菜-->起锅-->做饭-->装盘-->...-->洗碗

这一系列步骤,就是所谓的面向过程,而每一个步骤又涉及到哪些操作,就不进行深究了。这些步骤,都是需要亲力亲为的。

有没有一个简单粗暴的方式,让我们可以只负责吃饭就好了?答案是肯定有的,比如不怕挨打的话,可以说:“妈,我饿了。”当然还有更方便的:点个外卖……以此来达成目的,所有的步骤无需自己动手,只需要通过对象,使其代为进行(通俗的说,就是帮我们把那些步骤做了),称之为——面向对象。

简单地说,我们要做一件事,面向过程意味着亲力亲为,面向对象则只需要向对象发出指定。比如我们想订做家具,大多数情况下不会自己去砍木头测量打磨加工,而会找木匠师傅(这里只是个比喻,下订单也无可厚非,毕竟最终的执行者还是老师傅)。再比如我们新买的房子需要装修,是自己进行设计然后买材料改布局刷还是找装修师傅?显而易见,面向对象只需要了解哪个对象做什么最为方便快捷,没有对象我们也可以创建对象,而面向过程则需要每一个步骤都了然于胸

面向对象,意义在于需要了解如何快速而有效的实现目的——通过对象!
下面我们通过代码来比较一下面向过程以及面向对象:
假设我们需要有一个方法,可以自动显示出
猫的声音:喵喵~
狗的声音:汪汪~
牛的声音: 哞哞~
人:说人话~

面向过程的写法:

# 定义一个方法,区别不同的动物发出不同的声音

def speak(animal):
    if animal == "猫":
        print("$s:喵喵~" % animal)
    elif animal == "狗":
        print("$s:汪汪~" % animal)
    elif animal == "牛":
        print("$s:哞哞~" % animal)
    else:
        print("$s:说人话" % animal)

a, b, c, d = "猫", "狗", "牛", "人"

speak(a)
speak(b)
speak(c)
speak(d)

打印结果:
猫:喵喵~
狗:汪汪~
牛:哞哞~
人:说人话

面向对象的写法:

# 定义一个动物类,具有两个属性(种类,声音)
class Animal():
    def __init__(self, find, voice):
        self.find = find
        self.voice = voice

    def say(self):
        print("%s:%s" % (self.find, self.voice))


cat = Animal("猫", "喵喵~")
cat.say()
dog = Animal("狗", "汪汪~")
dog.say()
cow = Animal("牛", "哞哞~")
cow.say()
people = Animal("人", "说人话")
people.say()

打印结果:
猫:喵喵~
狗:汪汪~
牛:哞哞~
人:说人话

闲话说了一箩筐,仅仅只是粗浅地介绍了一下何为面向对象,后续将会针对面向对象进行更为详细阐述——什么是类(方法、变量、实例化)…

类是对一系列事物的统称, 同类事物必定具有相同的特征。

特征分类:

  • 状态 → 变量 (成员变量)
  • 行为 → 方法 (成员方法)

通过class定义一个类,类名需要符合大驼峰命名(单词首字母大写后续小写)规范:

"""定义一个类"""
class People:
	# 类变量,是这一个群体的共有属性
	pass

两种变量定义的区别:

在类定义中声明的变量为 公有变量/公有属性 ,每个对象均拥有此变量对应的属性,如role = "人",供所有实例化对象调用。

在创建对象后声明的变量为 独有变量/独有属性 , 仅当前对象存在此变量对应的属性,如:person1.name = "",供当前实例化对象所用。

类变量是归属类的,实例变量是归属对象的。

类属性

类的属性以变量的形式表示,定义在类的内部或者成员方法中。
类属性可以被成员方法与实例化对象调用。

两个下划线开头,声明该变量为私有变量,只能在类的内部调用 ,不能在类的外部调用。

添加类属性

定义格式一:
在类内部,变量名=""
定义格式二:
先实例化类,创建对象:对象名 = 类名()
然后赋值:对象名.变量名= ""

格式一:
类中直接添加属性——变量名 = 值
在变量名前加两个下划线,__变量名,声明该变量为私有变量

"""定义一个类"""
class People"""对类的描述,是这一个群体的共有属性"""
    # 公开变量,可供实例化对象直接读取
	role = "人"
    name = None
    age = 0
    # 私有变量,只可以在类的内部使用,外部无法调用
    __Idcard = None

格式二:
实例化对象补充属性,对象名.变量名 = 值

# 实例化People这个类,创建对象person1
person1 = People()
person1.sports = "basketball"

类方法

类方法:默认“cls” 参数,可以被类和对象调用,需要加上 @classmethod 装饰器。

注意事项:

1.类方法中不允许使用实例变量和实例方法。

2.实例方法中允许使用类变量和类方法。

添加类方法
"""定义一个类"""
class People# 对类的描述,是这一个群体的共有属性
	role = "人"
    
    # 定义一个类方法
    @classmethod
    def voice(cls):
        print("这里是一个类方法,仅提供类声明。")

调用格式:对象名.方法名()

有参数存在的情况下,调用格式:对象名.方法名(实参1,…)

实参与形参一一对应,self无需传实参进去

添加成员方法

成员方法: 在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self

"""定义一个类"""
class People# 对类的描述,是这一个群体的共有属性
	role = "人"
    # 定义成员方法,self默认作为第一个参数,不需要实际赋值
    def run(self):
        print("我可以跑步")
添加静态方法

静态方法:用 @staticmethod装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用。
静态方法,是从类的完整性来考虑,把函数放在了类的内部,本质上是一个函数,且“()”内不需要默认参数self,。

"""定义一个类"""
class People# 对类的描述,是这一个群体的共有属性
	role = "人"
    # 定义一个静态方法
	@staticmethod 
    def shy():
        print("静态方法,相当于写了个函数放在了类中。")
添加私有方法

两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。

"""定义一个类"""
class People# 对类的描述,是这一个群体的共有属性
	role = "人"
    # 定义一个私有方法 
    def __oneself(self):
        self.statement = "傲娇"
        print("我%s,只允许类内部调用,外面别想见我。" % self.statement)

私有方法仅可以在类的内部调用,调用格式:self.__方法名(),实例化对象无法调用私有方法。

添加构造方法(魔术方法)

在类的定义中,有一类方法在类实例化的过程中自动执行,不需要进行调用,内部属性可以直接被对象接收,方法名以两个下划线包括在内,如__ init __(self):

"""定义一个类"""
class People# 对类的描述,是这一个群体的共有属性
	role = "人"
    # 定义一个构造方法
    def __init__(self):
        # 定义的属性同样可以被所有实例化调用
		self.sports= "呼吸"

__init__(self)方法不需要返回值,或返回None。而其他的构造方法会需要返回对应的信息。
诸如此类的魔术方法(magic)还有很多,如__str__(self),__new__(self)__…等,在此不过多阐述,只需要明白一点——这些方法在创建类的实例化对象时,会自动执行,以后遇到的时候知道这些方法的执行机制就可以了。

小白初识Python,未完待……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值