python面向对象一

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/shell_x/article/details/102728485

面向对象(opp)

简介

什么是对象?
对象就是内存中存储指定数据的一块区域,实际上对象就是一个容器专门用来存储数据

对象的结构

  1. id(标识)
  • 用来标识对象的唯一性,每个对象都有唯一的id
  • id又解释器生成的,id就是对象的内存地址
  1. type(类型)
  • 类型决定了对象有哪些功能
  • 通过type()查看对象的类型
  1. value(值)
  • 值指的是对象中存储的具体数据
  • 可变对象(list, dict, set)&不可变对象(int, str, str, bool, tuple)

面向对象的举例

所谓面向对象简单理解就是语言中所有的操作都是通过对象来进行的

面向过程–>面向对象
把大象放进冰箱分几步?

  1. 打开冰箱--------对应打开功能
  2. 装大象----------对应存储功能
  3. 关门-------------对应关闭功能

面向对象是一种思考问题的方式,面向对象是一种思想
面向对象将事物变得简单化
大象放进冰箱,我面对的对象是冰箱,我知道对象的功能有打开,存储,关闭,至于冰箱是怎么打开,怎么存储,怎么关闭的不需要我关心,我只要用就可以了。
通过对象,去使用对象所具有的功能
(分装, 多态, 继承)
比如,我去参加面试,面试官是我的对象,他的功能审核,评分
我也是面试官的对象,我的功能,回答,应聘

对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。在面向对象程序设计中,对象所指的是计算机系统中的某一个成分。在面向对象程序设计中,对象包含两个含义,其中一个是数据,另外一个是动作。对象则是数据和动作的结合体。对象不仅能够进行操作,同时还能够及时记录下操作结果

面向过程

  • 面向过程将一个功能分解成一个一个小步骤
  • 但这种编程方式往往只适用于一个功能,我们要实现别的功能的时候,需要重新编程,复用性比较低
  • 比较符合人的思维,编写起来比较容易

类(class)

  • 类简单理解,类就是一张图纸,在程序中需要根据类来创建对象

语法:class 类名([父类]):
代码块

class MyClass():
    pass
a = MyClass() # 用MyClass这个类创建了一个对象mc,mc是MyClass的实例
print(int)
print(MyClass)
print(MyClass())
print(a)
# <class 'int'>
# <class '__main__.MyClass'>
# <__main__.MyClass object at 0x0000017C77DAB588>
# <__main__.MyClass object at 0x0000017C77DAB288>

我们之前学的对象都是python的内置对象,如int,你可以看到int也是一个类,和我们定义的类MyClass(注意用驼峰命名法命名)一样,都是一种类,是一个对象
当我们打印a时返回的是类的内存地址值。

isinstance()

  • 用来检测一个对象是否是一个类的实例
class MyClass():
    pass
a = MyClass()
r = isinstance(a, MyClass)
r1 = isinstance(int, MyClass)
print(r)
print(r1)
# True
# False

对象的创建流程

类是什么?

  • 类也是一个对象(类是一个用来创建对象的对象)
  • 类是一个type类型的对象
  • 可以向对象中添加变量,对象中的变量称之为属性。语法:对象.属性名 = 属性值
class MyClass():
    pass
a = MyClass()
print(id(MyClass), type(MyClass))
b = 10
print(id(b),type(b))
# 2133892710792 <class 'type'>
# 140706426417696 <class 'int'>

类是一种type类的对象

class MyClass():
    pass
a = MyClass()
a.name = 'spider man'
a.power = 'spin'
# spider man spin
print(MyClass().name)
# AttributeError: 'MyClass' object has no attribute 'name'

我们通过’a.name = ‘向MyClass中添加变量,但是我们打印’MyClass().name’,缺发现属性错误,MyClass对象中没有属性name
在内存中

类的定义

  • 类和对象都是对现实生活事务或程序内容的抽象
    实际上所有的事务就是由两部分组成
  1. 数据(属性)
  2. 行为(方法)
    在类的代码中,我们可以定义变量和函数
    类中的变量叫属性
  • 类中的变量可以成为所有实例的公共属性,所有实例可以访问这些变量
    类中的函数叫方法
  • 这些方法都可以通过类的实例调用
  • 如果是函数需要几个参数就传几个参数,不要不定长就传*参数,不定数关键字传参**参数
  • 如果是方法,默认传递一个参数,所以类中方法至少要定义一个参数,这个参数通常是self,这是一种规范,不是规则
class People():
    name = 'Batman'
    age = '30'
    power = 'rich'
    print(name)
p = People()
p.name = 'iron man'
print(People)

self是什么

  • self这个参数就是调用方法的对象本身
  • 规范化我们使用self,也可以是a, chris, balabala,都是可以的
class People():
    name = 'Batman'
    age = '30'
    power = 'rich'
    def SayHi(self):
        print(id(self),self)

p1 = People()
p1.SayHi()
print(id(p1),p1)
# 2698834200392 <__main__.People object at 0x000002745F0DC748>
# 2698834200392 <__main__.People object at 0x000002745F0DC748>

class People():
    name = 'Batman'
    age = '30'
    power = 'rich'
    def SayHi(self):
        print('你好我是{}'.format(self.name))
p1 = People()
p2 = People()
p1.SayHi()
p1.name = 'iron man'
p1.SayHi()
p2.name = 'spider man'
p2.SayHi()
# 你好我是Batman
# 你好我是iron man
# 你好我是spider man

属性和方法

属性和方法的查找流程

  • 当我们去调用一个属性或方法时,解析器会现在当前的对象中寻找是否有该属性或方法,若有,则返回当前对象的值
  • 如果没有,则去当前对象中的类对象中寻找,若有返回类对象中的属性值,若没有,报错

类对象和实例对象都已可以保存属性和方法

  • 若这个属性或方法,是所有类共享的,则应该保存到类对象中
  • 若这个属性或方法,是某个实例独有的,则应该保存到实例对象中

猜你喜欢

转载自blog.csdn.net/shell_x/article/details/102728485