python面向对象编程开胃菜

面向对象正菜:
面向对象之封装
面向对象之继承
面向对象之多态

面向对象与面向过程

什么是面向过程编程?
简单来说,就是函数之间的调用调用,强调函数或子程序。由很多函数形成逻辑联系构成指令的集合,来执行特定的任务。
问题所在:
(1)面向过程不注重数据的隐藏,这意味着别人可以轻松更改你的一个全局变量,你的程序不攻自破,有句话叫:”牵一发而动全身“,在面向过程编程表现得淋漓尽致。
(2)当程序庞大的时候,一旦有bug很难定义到哪里出的问题。

什么是面向对象编程?
简单来说,就是坐享其成,别人做好的东西为我所用,一切皆为对象,保留了结构化编程的所有优点,并且引入了许多提高编程的新特性,并且解决了面向过程中的问题。
优点:
(1)采用继承,封装,多态,提高了编程的效率
(2)提高了数据的隐私化,代码的重用性
面向对象编程与面向过程编程的区别
(1)面向过程注重算法,忽略数据。面向对象注重数据,对算法的注重程度没有面向过程高。
(2)面向过程编程把问题分解成一个个过程,一步步实现这些过程,问题就得到了解决。而面向对象编程把问题看成一系列对象之间的交互,设计出这些对象以及对象之间的交互,问题就得到了解决。

面向对象对象与类

面向对象:
什么是类?

是对一群具有相同特征或行为事务的统称,是抽象的,不能直接使用。例如,动物类分猫啊狗啊等等,人类分男人类女人类啊等等,会跑会跳可以是某种动物,某类人等等。大眼睛,黄皮肤类,可以是中国人也可以是别的国家等等。
什么是对象?
由类创造出来的实体,可以直接使用。在python里,一切皆为对象,对象也可以是变量,变量的本质是引用了值的id地址。也可以是一个函数。比如一个功能方法,一个行为函数。

类与对象之间的关系?
1.先有类后有对象
2.类只有一个,对象可以有多个

定义一个简单的类(只包含方法)
代码示例:

class Dog:
    def eat(self):
        print("吃骨头")
    def sleep(self):
        print("睡觉")
        
dog=Dog()
dog.eat()
dog.sleep()
print("*"*20)

dog_x=Dog()
dog_x.eat()
dog_x.sleep()

'''
运行结果:

吃骨头
睡觉
********************
吃骨头
睡觉
'''

总结:定义了一个Dog类,类中定义了两个方法,并且实例化了两次类,获得两个独立的类,调用类中定义的两个方法。

面向对象的self变量

self变量:self在python中的函数中都会传入进去,哪个对象调用方法或者属性,self就是那个对象的内存地址,我们可以证明一下
代码示例:

class Dog:
    def eat(self):
        print("eat方法中的self:",id(self))
        print("吃...")
    def sleep(self):
        print("sleep方法中self:",id(self))
        print("睡觉")

dog=Dog()
dog.eat()
dog.sleep()
print("对象的id:",id(dog))
print("*"*20)

dog_x=Dog()
dog_x.eat()
dog_x.sleep()
print("对象的id:",id(dog_x))

'''
运行结果:

eat方法中的self: 2547110411120
吃...
sleep方法中self: 2547110411120
睡觉
对象的id: 2547110411120
********************
eat方法中的self: 2547110413872
吃...
sleep方法中self: 2547110413872
睡觉
对象的id: 2547110413872
'''

结论:self的地址全都相同,说明他们指向了同一个类

在类的外部为其类增加类属性

class Person:
    def eat(self):
        print("吃饭")
        print(self.name)
        
people = Person()
people.name="李四"
people.eat()

'''
运行结果:

吃饭
李四
'''

self的使用要点:
1.python中的self等同于java里面的this,表示当前正在操作的类,而不是当前类
2.某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数。
3.self不是关键字,我们可以更换他,依旧是正常执行的。
代码示例:

class Dog:
    def run(xxx):
        print("狗狗要跑步")
    def sleep(xxx):
        print("狗狗要睡觉")
dog=Dog()
dog.sleep()
dog.run()

'''
运行结果:

狗狗要睡觉
狗狗要跑步
'''

结论:self是默认的,虽然可以更换,但是还是不要乱换的好。

面向对象的init方法

init()方法在创建对象的时候就执行了改内置方法。
init()方法可以做什么?
初始化变量
代码示例:

class Cat:
    def __init__(self):
        print("我是初始化方法")
        self.name="小明"
cat=Cat()
print(cat.name)
print("*"*20)

cat_x=Cat()
print(cat_x.name)

'''
运行结果:

我是初始化方法
小明
********************
我是初始化方法
小明
'''

面向对象的str方法

方法简介:打印对象的名称时默认调用的是str()方法,此方法默认返回的是对象的内存地址。我们可以重写str()方法打印对象保存的信息。
我们利用str方法与init方法写一个类,进行传参并打印信息。
代码示例:

class Student:
    def __init__(self,name,age,score):
        self.name=name
        self.age=age
        self.score=score
    def __str__(self):
        return "姓名:{},年龄:{},分数:{}".format(self.name,self.age,self.score)

student=Student("小明",18,100)
print(student)

'''
运行结果:

姓名:小明,年龄:18,分数:100
'''

来一波,推送吧!
群号:781121386
群名:人生苦短,我学编程
欢迎大家加入我们,一起交流技术!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值