复制代码

python 面向对象

导入
——Python面向对象基础
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。

面向对象介绍
面向过程:根据业务逻辑从上到下写代码
函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
面向对象编程:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程

面向过程编程与函数式编程对比
面向过程的关注点是: 怎么做
面向对象的关注点是: 谁来做
面向对象:按人们认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。
面向对象编程**(Object Oriented Programming-OOP)**是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。

类和对象的概念
类和对象是面向对象编程中重要的概念
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

类的组成部分
类(Class)由3个部分构成
类的名称: 类名
类的属性: 一组数据
类的方法: 允许对进行操作的方法 (行为)
例如:创建一个人类
事物名称(类名):人(Person)
属性:身高(height)、年龄(age)
方法:吃(eat),跑(run)…
定义类和对象
创建类

class Person(object):
    name='小明'
    age=18
    def eat(self):
        print('吃饭')

创建对象
对象名=类名()
例子

class Person(object):
    name='小明'
    age=18
    def eat(self):
        print('吃饭')
    def run(self):
        print('跑步')

xm =Person() # 创建对象
xm.eat() # 调用方法
print('{}的年龄是:{}'.format(xm.name,xm.age))  # 访问类属性

---------------------------------输出结果-------------------------------

吃饭
小明的年龄是:18

实例方法
在类的内部,使用 def 关键字可以定义一个实例方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
实例方法与属性
类里面定义的变量。定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性

class Animal(object):
    colour='白色'   # 类属性
    def __int__(self):
        self.name='旺财'   #实例属性
        '''
        实例方法,使用def关键字定义,第一个形参默认传实例对象本身
        一般使用self作为第一个参数
        '''
    def test(self):
        print('我是实例方法')
    def show(self):
        print('Animal.show')

__init__方法
创建一个Animal类,并实例化一个dog对象和cat对象。
init(self) 方法,初始化方法,实例化对象的时候自动调用,完成一些初始化设置。
如果init方法里面的属性固定了,每个类创建出来的对象属性都一样,这个时候我们是不是考虑将属性当参数在实例化对象的时候传进去,让类更通用

class Animal(object):
    def eat(self):
        print('喜欢吃肉')
dog=Animal()  #创建一个对象
dog.colour='red'  #添加属性
dog.name='旺财'  #添加属性
dog.age='2岁'
dog.eat()
print(dog.name,dog.colour,dog.age)

cat=Animal()  #创建一个对象
cat.colour='black'  #添加属性
cat.name='妞妞'  #添加属性
print(cat.name,cat.colour)

print('----------------改进-------------------')
class Animal(object):
    def __init__(self):
        self.name='旺财'
        self.colour='red'
        self.age='2岁'
    def eat(self):
        print('喜欢吃肉')
dog=Animal()  #在创建新对象的时候是自动执行的
print(dog.name)
dog.name='发财'  #添加属性
dog.age='2岁'
dog.eat()
print(dog.name,dog.colour,dog.age)

print('----------------改进2-------------------')
class Animal(object):
    def __init__(self,name,colour,age):
        self.name=name
        self.colour=colour
        self.age=age
    def  eat(self,food):
        print(self.name+'喜欢吃:'+food)
dog=Animal('旺财','black','2岁')
print(dog.name,dog.colour)
dog.eat('骨头')
cat=Animal('小花','red','3岁')
print(cat.name,cat.colour,cat.age)
cat.eat('')
---------------------输出结果--------------------------
吃饭
小明的年龄是:18
喜欢吃肉
旺财 red 2岁
妞妞 black
----------------改进-------------------
旺财
喜欢吃肉
发财 red 2岁
----------------改进2-------------------
旺财 black
旺财喜欢吃:骨头
小花 red 3岁
小花喜欢吃:鱼

理解self
self和对象指向同一个内存地址,可以认为self就是对象的引用。

class Person:
    '''
    定义类
    '''
    def eat(self):
        '''
        实例方法
        :return:
        '''
        print('self={}'.format(id(self)))
        pass
    pass
xw=Person()
print('self=%s'%id(xw))
xw.eat()
-----------------运行结果---------------------
self=1809163727296
self=1809163727296

self传参问题

所谓的self,可以理解为对象自己,某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可。

print('------------------添加参数--------------------')
class Person:
    '''
    定义类
    '''
    def eat(self,name,food):
        '''
        实例方法
        :return:
        '''
        print('%s 喜欢吃 %s'%(name,food))
        pass
    pass
xw=Person()
print('self=%s'%id(xw))
xw.eat('小王','榴莲')
-----------------输出结果--------------------
self=2269762334784
小王 喜欢吃 榴莲

魔术方法
在python中,有一些内置好的特定的方法,方法名是“xxx”,在进行特定的操作时会自动被调用,这些方法称之为魔法方法。
下面介绍几种常见的魔法方法。
__init__方法:初始化一个类,在创建实例对象为其赋值时使用。
__str__方法:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息。
__new__方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。
__class__方法:获得已知对象的类 ( 对象.class)。
__del__方法:对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源。

class Person:
    '''
    定义类
    '''
    def __init__(self,name,food):
        '''
        实例方法
        :return:
        '''
        self.name=name
        self.food=food
    def __str__(self):
        return  '%s 喜欢吃 %s'%(self.name,self.food)
    '''
    定义了__str__方法,在打印对象的时候,会执行__str__方法。__str__方法只能return一个字符串。
    '''
    pass
xw=Person('小王','榴莲')
print(xw)
-----------------输出结果-------------------------
小王 喜欢吃 榴莲

类和对象的概念
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能;
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数。
定义类和对象
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾;
实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
实例方法与属性
在类的内部,使用 def 关键字可以定义一个实例方法;
定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性。
__init__方法
构造初始化函数,在创建实例对象为其赋值时使用。
理解self
self和对象指向同一个内存地址,self就是对象的引用。
魔法方法
在python中,有一些内置好的特定的方法;
方法名是“xxx”;
在进行特定的操作时会自动被调用。

posted @ 2021-12-14 20:40  怪~咖  阅读(213)  评论(0编辑  收藏  举报
复制代码