python之路 面向对象(一)

面向过程vs面向对象

面向过程的核心是过程,是解决问题的步骤。

优点:极大降低了写程序的复杂度,只需顺着要执行的步骤,码代码即可。

缺点:一套程序解决一个问题,牵一发动全身。

面向对象的核心是对象。

优点:解决了程序的扩展性,对某一个单一对象的修改,会映射到整个体系中。

缺点:可控性差,无法向面向过程一样可以很精准的预测到结果,面向对象程序一旦开始就由对象之间的交互解决问题,无法预测结果。

类和对象(实例)


python中一切皆对象,类型的本质就是类,包括字典,列表,数字,字符串等。

在python中,用变量表示特征,用函数表示方法,具有相同特征和方法的一类事物即使“类”,对象就是类中具体的一个。


定义一个类

class Class_name:  #class关键字,类名手字母大写,后跟冒号
    pass

声明类

class Person:
    role = "person"#属性 静态属性
    def walk(self):
        print("person is walking...")#方法 动态属性

类的两种作用:属性引用和实例化

属性引用(类名. 属性)

class Person:
    role = "person"#属性 静态属性
    def walk(self):
        print("person is walking...")#方法 动态属性
print(Person.role)#查看role的属性
print (Person.walk)#引用人的walk方法

实例化: 类名加括号就是实例化,自动触发__inti__方法的运行,可以使用它来为每个实例定制自己的特征。

class Person:
    role = "person"#属性 静态属性
    def __init__(self,name):
        self.name = name
    def walk(self):
        print("person is walking...")#方法 动态属性
print(Person.role)
print (Person.walk)

实例化就是类产生对象的过程。

特殊的类属性

二:特殊的类属性
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)

对象是关于类实际存在的一个例子,即实例,对象只有一种作用,属性引用

class Person:
    ‘‘‘定义一个关于人的类‘‘‘
    role = "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 -= self.aggr

egg = Person("egon",100,1000)
# 属性引用
print(egg.name)
print(egg.aggr)
print(egg.life_value)

用函数来解释这个类:

def Person(*args,**kwargs):
    self = {}
    def __init__(name,aggr,life_value):

        self["name"] = name
        self["aggr"] = aggr
        self["life_value"] = life_value
        return self
    return __init__(*args,**kwargs)
egg = Person("egon",10,20)
print(egg)

定义及调用的固定模式

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

    def 方法名(self):pass

    def 方法名2(self):pass

对象名 = 类名(1,2)  #对象就是实例,代表一个具体的东西
                  #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
                  #括号里传参数,参数不需要传self,其他与init中的形参一一对应
                  #结果返回一个对象
对象名.对象的属性1   #查看对象的属性,直接用 对象名.属性名 即可
对象名.方法名()     #调用类中的方法,直接用 对象名.方法名() 即可

小结

固定模式

对象交互:

class Person:#定义一个人类
    role = "中国人"
    def __init__(self,name,life_value,aggr):
        self.name = name
        self.life_value = life_value
        self.aggr = aggr
    def attack(self,dog):
        dog.life_value -= self.aggr
class Dog:#定义一个够类
    def __init__(self,name,life_value,aggr):
        self.name = name
        self.life_value = life_value
        self.aggr = aggr
    def bite(self,person):
        person.life_value -= self.aggr
egg = Person("egon",500,50)
dog = Dog("泰迪",20000,500)
# egon攻击狗,狗的生命值少了50
print(dog.life_value)
egg.attack(dog)
print(dog.life_value)
# 狗咬egon,egon的生命值少了66
print(egg.life_value)
dog.bite(egg)
print(egg.life_value)
# egg 有了200块钱买装备
egg.money  = 200

class Weapon:#定义一个武器类
    def __init__(self,name,price,aggr,life_value,attack_force):
        self.name = name
        self.price = price
        self.life_value = life_value#生命加成
        self.attack_force = attack_force#攻击力
        self.aggr = aggr#伤害加成
    def Update(self,person):#带装备
        person.money -= self.price
        person.life_value += self.life_value
        person.aggr += self.aggr
    def Kill(self,obj):#obj代表被攻击对象   大招
        obj.life_value -= self.attack_force
打狗棍 = Weapon("打狗棍",199,50,50,10000)
if egg.money > 打狗棍.price:
    打狗棍.Update(egg)
    egg.Weapon = 打狗棍
#egon的攻击力和生命值都增加了50
print(dog.life_value)
print(egg.life_value)
egg.attack(dog)
print(dog.life_value)
#egon放大招了,狗的生命值减少10000
print(dog.life_value)
print(egg.life_value)
egg.Weapon.Kill(dog)
print(dog.life_value)

人狗大战

类命名空间与实例命名空间

创建一个类的时候就会创建一个类的名称空间

静态属性就是直接在类中定义的变量

动态属性就是定义在类中的方法

类的数据是共享给所有的对象的

而类的动态属性是绑定到所有的对象的

创建一个实例就会创建一个对象/实例的名称空间,存放对实例的名字,称为实例的属性

时间: 2024-10-12 16:58:46

python之路 面向对象(一)的相关文章

Python之路 - 面向对象初识

本章内容 编程范式介绍 类与实例 属性与方法 构造函数 命名空间 属性(静态和动态) 与类的关系 对象交互与类的组合 一.编程范式 编程是程序员用 特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程 , 而实现一个任务的方式有很多种不同的方式 , 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式 面向过程编程 Procedural Programming 面向过程编程就是程序从上到下一步步执行 , 基本设计思路就是程序一开始是要着手解决一个大的问题

python之路——面向对象(基础篇)

面向对象编程:类,对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类" 和 "对象" 的使用. 面向对象技术简介 类(class):用来描述有相同属性和方法的对象的集合,它定义了集合中每个对象所共有的属性和方法. 对象(object):类的实例 创建类和对象 1 class Person: 2 3 def __init__(self,name,age):

python之路---面向对象编程(二)

类的继承 1.在python3中,只有新式类,新式类的继承方式为:广度优先.而python2中,经典类的继承方式为:深度优先.那么我们来看看深度优先和广度优先的区别吧 如下图,为类之间的继承关系.B,C继承A,D继承B,E继承C,F继承D,E   深度优先: class A: # def foo(self): # print 'from A' pass class B(A): # def foo(self): # print 'from B' pass class C(A): # def foo

python之路---面向对象编程(一)

一.设计思想的发展 面向机器(代码复杂,效率低,学习成本高,开发周期长)-------->面向过程(扩展性差,不适用多变的需求改变)----------->面向对象(扩展性好,但是可控性差) 二.面向过程和面向对象对比 面向过程: 定义:面向过程的核心是过程(即流水线式设计),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了程序的复杂度 缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也

Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强-" 什么是面向对象 面向对象就不像面向过程那样按照功能划分模块了,它所关注的是软件系统有哪些参与者,把这些参与者称为对象,找出这些软件系统的参与者也就是对象之后,分析这些对象有哪些特征.哪些行为,以及对象之间的关系,所以说面向对象的开发核心是对象 什么是类 面向对象编程的两个重要的概念:类和对象 类是

Python之路-面向对象

一.面向对象 1.面向对象和面向过程比较 面向过程关注问题解决的步骤,是一种机械式的思维方式,流水线方式实现. 面向对象中对象是特征和技能的结合体,面向对象是对现实世界的模拟,好比 上帝创造世界. 面向过程优点可以将复杂问题流程化,简单化,面向对象的优点是可扩展性强. 2. 类和对象 类和对象的关系:类是一系列对象相似特征与技能的结合体. 现实世界:现有具体的对象--------------->总结相似之处------------>形成类 程序中:先定义类-------------->调

python之路——面向对象(进阶篇)

面向对象进阶:类成员.类成员的修饰符.类的特殊成员 类成员 类成员分为三大类:字段.方法.属性 一.字段 静态字段 (属于类) 普通字段(属于对象) 1 class City: 2 # 静态字段 3 country = "中国" 4 5 def __init__(self,city_name): 6 # 普通字段 7 self.city_name = city_name 8 9 def show(self): 10 print(self.city_name) 11 12 13 obj1

python之路 面向对象进阶篇

一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Province: # 静态字段 country = '中国' def __init__(self, name): # 普通字段 self.name = name # 直接访问普通字段 obj = Province('河北省') print obj.name # 直接访问静态字段 Province.country 由上述代码可以看出[普通字段需

python之路--面向对象之封装

封装 什么是封装? 隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处 将变化隔离 便于使用 提高复用性 提高安全性 封装原则 将不需要对外提供的内容都隐藏起来: 把属性都隐藏,提供公共方法对其访问. 封装方法 在python中用下划线开头的方式,将属性隐藏起来(设置成私有)即封装 私有属性 私有属性一 class Person: def __init__(self,height,weight,name,sex): self.__height = height # 私有属性:外部不能调用