2.1.0 Python初识面向对象

点击跳转Python笔记总目录python

1、面向过程:

面向过程的程序设计的核心是过程(流水线式思惟),过程即解决问题的步骤,面向过程的设计就比如精心设计好一条流水线,考虑周全何时处理什么东西。小程序

优势: 极大地下降了写成学的复杂度,只须要顺着执行的步骤,堆叠代码便可bash

缺点: 一套流水线或者流程就是用来解决一个问题,若是修改代码就都得改变函数

2、面向对象:上帝的思想

优势: 解决了程序的扩展性。对某一个对象单独修改,会马上反映到整个体系中,如对游戏中一我的物参数的特征和技能修改都很容易。post

缺点: 可控性差,没法向面向过程的程序设计流水线式的能够很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即使是上帝也没法预测最终结果。因而咱们常常看到一个游戏人某一参数的修改极有可能致使阴霸的技能出现,一刀砍死3我的,这个游戏就失去平衡。ui

3、类:是具备相同特征的一类事物(人,狗,老虎)

  对象/实例:具体的某一事物spa

  实例化:类到对象的过程(实例=类名(参数1,参数2))设计

4、初始类和对象

类的定义:code

class  Person:   ##class  类名:
	##注意类名后面不要括号 
	类体
复制代码

在python中,用变量表示特征,用函数表示技能,于是具备相同的特征和技能的一类事物就是‘类’, 对象则是这一类事物中具体的一个 类的两种做用: 属性引用和实例化 属性引用:对象

class Person:
    role = '中国人'  ##类属性----静态属性
    def walk(self):  ##这里的函数叫作方法-----动态属性
        ##注意:self必须写
        print('person is walking ...')
print(Person.role) ##查看类属性
print(Person.walk) ##查看类方法 , 用类名去调用方法名,打印出来的是内存地址
复制代码

实例化:

class Person:
    role = '中国人'
    def __init__(self,name,sex):
        self.name=name
        self.sex=sex
    def walk(self):
        print('person is walking')

p= Person('腿姐',21) ##实例化:类名(参数1,参数2) 类名()就等于在执行Person.__init__()
print(p.name)  ##直接查看属性 对象名.属性名
print(p) ##返回的是一个对象
p.walk()  ##调用方法 ,对象名.方法()
复制代码

对象的两种做用:查看属性和调用方法(咋上面的实例化中讲到)

5、关于self

self:在实例化时自动将对象/实例自己传给__init__的第一个参数,你也能够给它起个别的名字,可是通常正常人都不会这么作,由于你改了别人就不认识了。

注意:def init(self): 这句话能够写也能够不写,只要有参数参进来的时候就必须得写

class Person:
	def  eat(self):
		##这里的self必须得写
		pass
复制代码

6、特殊的类属性

class Person:
    role = '中国人'
    def __init__(self,name,sex):
        self.name=name
        self.sex=sex
    def walk(self):
        print('person is walking')

p= Person('腿姐',21) ##实例化一个对象
print(Person.__name__,type(Person.__name__)) ##查看类的名字(这里的类名是字符串类型的)
print(Person.__dict__) ##查出的是一个字典,key为属性名,value为属性值
print(Person.__doc__)## 就是把注释显示出来
print(dir(Person)) ##查看类的方法,以列表的形式显示出来
print(Person.__module__) ##类定义所在的模块
print(Person.__class__)
print(isinstance(p,Person))##判断对象 是不是类的实例
复制代码

7、对象的相关知识

1.对象是关于类而实际存在的一个例子,即实例 2.对象/实例只有一种做用:属性引用

egg = Person('egon',10,1000)
print(egg.name)
print(egg.aggressivity)
print(egg.life_value)  ##固然,你也能够引用一个方法,由于方法也是一个属性。
复制代码

8、面向对象小结

定义及调用的固定格式

class 类名:
    def __init__(self,参数1,参数2):
        self.对象的属性1 = 参数1
        self.对象的属性2 = 参数2

    def 方法名(self):
    	pass
    def 方法名2(self):
    	pass
复制代码

9、对象之间的交互

人狗大战小程序

class Person:
    def __init__(self,name,aggr,life_value):
        self.name=name
        self.aggr=aggr
        self.life_value=life_value
    def attack(self,dog): ##人能够攻击狗
        dog.life_value=dog.life_value-self.aggr
class Dog:
    def __init__(self,name,aggr,life_value):
        self.name = name
        self.aggr = aggr
        self.life_value = life_value

    def attack(self,egg): ##狗也能够攻击人
        egg.life_value = egg.life_value - self.aggr
egg = Person('egon',250,1000)  ##示例化一我的呢
dog = Dog('乐乐',50,2000)  ##实例化一个狗
print('狗没攻击前egon的生命值:',dog.life_value)  ##没攻击前egon的生命值
egg.attack(dog)   ##让egon去攻击狗乐乐
print('狗攻击后egon的生命值:',dog.life_value)  ##攻击后egon的生命值

print('egon没攻击前狗的生命值:',egg.life_value)  ##没攻击前egon的生命值
dog.attack(egg)   ##让狗去攻击egon
print('egon攻击后狗的生命值:',egg.life_value)  ##攻击后egon的生命值
复制代码

10、类命名空间与对象,实例的命名空间

建立一个类就会建立一个类的名称空间,用来存储类中定义的全部名字,这些名字成为类的属性 而类有两种属性:静态属性和动态属性

  • 静态属性就是直接在类中定义的变量
  • 动态属性就是定义在类中的方法
相关文章
相关标签/搜索