来,一起面对,面向对象!!!

本文深入探讨了面向对象和面向过程编程的区别与联系,强调两者并无绝对优劣,关键在于适用场景。面向对象通过对象解决问题,提高代码复用性和扩展性;面向过程则侧重流程化和需求分解。文章详细解析了Python中类的定义、实例化过程及对象属性的管理。

简单说,不论面向对象,还是面向过程,没有必然的好坏之分。就像是“功夫本没有高低之分,只是练功夫的人有强弱之别”一样。

面向过程:讲究步步为营,流程化和需求的分解是关键。

面向对象:上帝思维,所有的问题,都通过“对象”来解决。像是一个知人善任的帝王。

重点介绍一下面向对象的优点:解决了面向过程中的扩展性低的情况。

所以,面向对象的缺点就很明显了,就是复杂!这里的复杂并不是代码的实现,而是对于需求分析中的各类之间的关系,以及应该如何去关联。

首先,需要认清的一点,在现实生活中,是先有对象,才开始有了”类“这个概念,所以类是后来才有的,是抽象的。

但是,在计算机的世界里,必须是先有类才能产生对象,因为计算机并不知道你后面要写什么。所以,通过类产生对象,先有超类才有子类都是这样的道理。

(先定义类,再调用类。)

class Galen:
    country=De_Marcia
     def __init__(self,name,hp,ad)
        self.name=name
        self.hp=hp
        self.ad=ad
    def attrack(self):
        pass
View Code

 到这里,就可以分析一下在定义类的时候,运行的过程了:

1.定义类名后,开辟了一块内存空间。

2.定义了静态属性

3.定义__init__方法

4.定义了函数

5.将内存地址给Galen

类的静态属性增删改查

增加:
galen.type=tanke
删除:
del galen.type
改:
galen.country="china"
查:
galen.country
View Code

在这里,着重要说一点::这里可以用__dict__()方法,但是,这种方法在这里只能看,不能改,也不能删!!!

print(galen.country)
View Code

 然后,就是实例化的过程了。

g1=Gaglen("super")
g2=Gaglen("men")
g3=Gaglen("super_man")
实例化后的对象都用到了__init__()
View Code

这里也解释一下。

在执行到__initi__的时候,就会开辟一个内存空间。这个内存空间的地址就给了self,在实例化后,就会将self的地址又给到对象。而这块空间中的变量都是可以用self.变量名,进行赋值的。这块内存中还有类对象指针,这指针又指向了在定义类的时候开辟的空间,这样就打通了这两块内存。

接下来,就来看看这块开辟的__init__内存空间的增删改查

增加:
g1.level=1
删除:
del g1.level
修改:
g1.name=666
修改方法2:
g1.__dict__["name"]=666
查询:
g1.name
g1.__dict__
View Code

趁热打铁,就再说一说,因为前面说过,在__init__中有类对象指针,这就单项的指向了定义类的时候开辟的内存,这就会产生下面的操作

print(g1.country)

这样的调用是成功的,就是说,对象可以调用类的静态属性。

但是,重点是:对象是不能修改类的静态属性的。或者是说如果对象修改了类的静态变量,其实只是在自己的空间中添加了修改的静态变量,而静态变量的值就是你自己改的值,所以,说白了,其实不是在修改类的静态变量,而是在自己的空间内新建了一个变量。而类的其他实例化对象在调用类的静态变量的时候,还是原来的值。

在说这里的一个点,这里的说的不变其实就是说类定义是开辟的内存中的静态变量地址不变,但是如果这里的静态变量是一个可变的数据类型的时候,其实这个列表的内存是不变的,但是其中的元素的内存地址改变,或者说,改变可变数据类型的元素是可以的~!

 类中的方法,类是自己可以调用的。类·方法    就可以了!

类中定义的函数就是绑定给对象的,绑定不同的对象,就用不同的绑定方法。

到这里,就可以说一句,python3中,类就是类型,数据类型!!

所以,发挥你的想象力,python一切皆对象!!

lst1=list()
lst2=list()
lst3=list()
每个对象都有append的方法,但是,内存地址是不同的!
lst1.append(1)
这样操作后,在lst1中有1,但是,lst2和lst3中都是没有的。

试想一下,在远古时期,只有面向过程,但是没有面向对象。一旦需要什么数据的时候,都是需要输入的,解决的办法就是定义成全局变量,然后在引用,或者如果数据量不是特别的巨大,还可以考虑用到闭包。

但是有了类以后,就可以通过类可以将数据和操作绑定到了一起。而且扩展性高,分成不同的类后,然后修改一个类的属性后,就可以影响或改变其他的类。效用很高!

 

转载于:https://www.cnblogs.com/ycxiaolaba/p/9996517.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值