一。面向对象概念
面向对象是一种编程思想,是实现代码高内聚低耦合的关键概念,核心是对象,程序就是由多个对象组成,程序员调度这些对象进行工作。
而与之相对的是面向过程的编程。
优点:逻辑清晰 , 复杂问题简单化,流程化
缺点: 扩展性差,可维护性差
比如将大象放入冰箱的三步:1.打开冰箱门,2.将大象放进去,3.关上冰箱门。
而使用了面向对象的方法就是找一个能把大象放入冰箱的人。
面向对象有三个优点:
1.扩展性。
2.灵活性。
3.重用性。
而缺点是1.程序的复杂度大大提高。2.无法判断程序的走向。
如今,大部分面向人的软件都是采用面向对象编程的程序,而对于机器来说。都是使用面向过程。如编写操作系统。
二。类和对象
1。对象:
对象就是一个具体的事务,一个内涵技能与数据的集合
创建对象时使用大驼峰,就是将第一个字母大写,小驼峰就是将第一个字母小写
类就是对一系列对象的模糊定义,比如动物是类,类中包函了众多对象中共有的特性与技能。例子
class animal: height=100 width=100 weight=100
这便创建了一个动物类,每个动物都有宽和高,但不是每个动物的高都是100,所以需要对类实例化一个对象,创造出一个特别的对象:
dog=animal
dog.height=50
创建了一个dog对象,将他的高设置为50。
当实例化对象后,可以对其内部的数据修改,然后输出他的所有数据可以看到
print(dog.height,dog.weight,dog.width) #50 100 100
修改的数据生效了,而没修改的数据还是原来的数据,原理如图
当dog的名称空间里有height时就会采用dog对象中的数值,当dog名称空间中没有的数据就会在class中找。
如果dog中的数据发生变化,dog2中的数据不会发生改变。
对于对象中的增删,对类也是适用的,:
dog=animal dog.height=50 animal.wd=100 del animal.width print(dog.height,dog.weight,dog.width,dog.wd)
修改上述已经演示过了,而查询需要使用关键词(__dict__),会将对象中所以属性打印
print(dog.__dict__) print(animal.__dict__)
三。init
init是一个类里的内置函数,当创建对象时会自动运行该函数,可以快速赋值。
init会自动将对象作为第一个参数传入,参数名称位self ,self可以是别的名字,但不建议改。
class person: def __init__(self,name,age,sex='male'): self.name=name self.age=age self.sex=sex lzx=person('lzx',23)r
如此定义了一个person对象。
对象的精髓就是讲数据和处理数据的函数整合到一起 ,这样一来拿到一个对象就同时拿到了需要处理的数据以及处理数据的函数。
四。对象类的绑定方法
在写好一个类后,要在里面写一个方法具有对象特色的时候可以把self作为参数传入,而使用class作为绑定时需要使用@classmethon装饰器对其进行装饰,在使用cls将参数传入,这种名字可以改变,但是最好使用该名称,以便二次开发。
class person: country='china' def __init__(self,name): self.name=name def say_hello(self): print('hello,i am %s'%self.name) @classmethod def show_country(cls): print(cls.country) @staticmethod def show_hello(): print('hello') lzx1=person('lzx') lzx1.say_hello() lzx1.show_country() lzx1.show_hello() #hello,i am lzx #china #hello
而staticmethod是使用非绑定方法,和类外的方法使用是一样的。