欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

17.面向对象(一)

程序员文章站 2022-06-02 21:34:02
一.面向对象的概念 面向对象编程(Object-oriented Programming,简称 OOP),是一种封装代码的方法 为什么要有面向对象:是为了更好地模拟现实世界的事物,并把描述特征的数据和代码块(函数)封装到一起 比如说,将乱七八糟的数据扔进列表中,这就是一种简单的封装,是数据层面的封装 ......

一.面向对象的概念

面向对象编程(object-oriented programming,简称 oop),是一种封装代码的方法

为什么要有面向对象:是为了更好地模拟现实世界的事物,并把描述特征的数据和代码块(函数)封装到一起

比如说,将乱七八糟的数据扔进列表中,这就是一种简单的封装,是数据层面的封装;把常用的代码块打包成一个函数,这也是一种封装,是语句层面的封装。

class person:
#比如人有一些属性,名字、性别、年龄等
    name = "mewtwo"
    sex = "男"
    age = 21
 
#人有一些行为动作或者说方法
    def run(self):
        print("人会跑")#会跑
    def shop(self):
        print("人会购物")#会购物
    def sleep(self):
        print("人会睡觉")#会睡觉

面向对象中,常用术语包括:

  • 类:可以理解是一个模板,通过它可以创建出无数个具体实例。比如,前面编写的 tortoise 表示的只是乌龟这个物种,通过它可以创建出无数个实例来代表各种不同特征的乌龟(这一过程又称为类的实例化)。
  • 对象:类并不能直接使用,通过类创建出的实例(又称对象)才能使用。这有点像汽车图纸和汽车的关系,图纸本身(类)并不能为人们使用,通过图纸创建出的一辆辆车(对象)才能使用。
  • 属性:类中的所有变量称为属性。例如,tortoise 这个类中,bodycolor、footnum、weight、hasshell 都是这个类拥有的属性。
  • 方法:类中的所有函数通常称为方法。不过,和函数所有不同的是,类方法至少要包含一个 self 参数(后续会做详细介绍)。例如,tortoise 类中,crawl()、eat()、sleep()、protect() 都是这个类所拥有的方法,类方法无法单独使用,只能和类的对象一起使用。

二.类的定义

python 中使用类的顺序是:先创建(定义)类,然后再创建类的实例对象,通过实例对象实现特定的功能。

如何创建一个类:

  class 类名(每个单词首字母大写,单词之间不用符号隔开):
     零个到多个类属性...(无先后顺序之分,相互之间可以调用)
     零个到多个类方法...(无先后顺序之分,相互之间可以调用)

python 的类定义由类头(指 class 关键字和类名部分)和统一缩进的类体构成,在类体中最主要的两个成员就是属性和方法。如果不为类定义任何属性和方法,那么这个类就相当于一个空类,如果空类不需要其他可执行语句,则可使用 pass 语句作为占位符。但是空类没有意义,所以比较少用

定义一个类

class person :
    '''这是一个学习python定义的一个person类'''
    # 下面定义了一个类属性
    hair = 'black'
    # 下面定义了一个say方法
    def say(self, content):
        print(content)
class 语句只能创建一个类,而无法创建类的对象,因此要想使用已创建好的类,还需要手动创建类的对象,创建类对象的过程又称为类的实例化。
  语法:类名(参数)
案例:
  
class person :
    '''定义的一个person类'''
    # 定义2个类变量
    name = "mewtwo"
    age = "22"
    def __init__(self,name,age):
        #定义2个实例变量
        self.name = name
        self.age = age
        print("这个人的名字是:",name," 年龄为:",age)
    # 定义一个say实例方法
    def say(self, content):
        print(content)
# 将该person对象赋给p变量
p = person("mewtwo",22)
类对象的使用
# 类名的角度
#     # 操作类中的静态变量
#         # 1, person.__dict__ 查询类中的所有的内容 (不能进行增删改操作)
# print(person.__dict__)
# print(person.__dict__['faith'])
# person.__dict__['mind'] = '无脑'
# print(person.__dict__['mind'])
        # 2, 万能的  .  对类中的单个的变量进行增删改查,用 万能的 点
# print(person.mind)
# print(person.animal)  # 查
# person.money = '运用货币'  # 增
# person.mind = '无脑的' # 改
# del person.mind
# print(person.__dict__)
#
#     #操作类中的方法  (工作中基本不用类名去操作)
# # person.work(111)
#
# # 对象的角度
# ret = person()  # 类名+()的这个过程:实例化的过程(创建一个对象的过程),
#           # person() 实例化对象,实例,对象.
# print(ret)
# #1,只要类名+() 产生一个对象,自动执行类中的__init__方法.



class person:
    '''类体:两部分:变量部分,方法(函数)部分'''
    mind = '有思想'  # 变量,静态变量,静态字段
    animal = '高级动物'
    faith = '有信仰'

    def __init__(self,name,age,hobby):
        self.name = name  #  person.money = '运用货币'
        self.age = age
        self.hobby = hobby

    def work(self):  # 方法,函数,动态变量

        print('%s都会工作...' %self.name)
    def shop(self):

        print('人类可以消费....')

# 类名的角度
    # 操作类中的静态变量
        # 1, person.__dict__ 查询类中的所有的内容 (不能进行增删改操作)
# print(person.__dict__)
# print(person.__dict__['faith'])
# person.__dict__['mind'] = '无脑'
# print(person.__dict__['mind'])
        # 2, 万能的  .  对类中的单个的变量进行增删改查,用 万能的 点
# print(person.mind)
# print(person.animal)  # 查
# person.money = '运用货币'  # 增
# person.mind = '无脑的' # 改
# del person.mind
# print(person.__dict__)

    #操作类中的方法  (工作中基本不用类名去操作)
# person.work(111)

# 对象的角度
# ret = person('alex',1000, 'oldwomen')  # 类名+()的这个过程:实例化的过程(创建一个对象的过程),
          # person() 实例化对象,实例,对象.
# print(ret)


#1, 类名+()产生一个实例(对象,对象空间.)
#2, 自动执行类中的__init__方法,将对象空间传给__init__的self参数,
#3, 给对象封装相应的属性.
# print(ret.__dict__)

# 对象的角度
    # 操作对象中的静态变量
        #1, __dict__ 查询对象中的所有的内容
        #2, 万能的.  万能的 点.
# print(ret.name)  # 查
# ret.high = 175  # 增
# del ret.name  # 删
# ret.age = 73 # 改
# print(ret.__dict__)
    # 对象操作类中的静态变量 : 只能查询.
# print(ret.mind)

    # 对象调用类中的方法  (工作中 通过对象执行类中的方法,而不是通过类名)
# ret.shop()
# print(ret)

代码是我看视频的时候看到的,上面是我自己总结的,但是感觉面向对象学的有点懵逼,还没完全懂