七.面向对象基础(上)

1.面向对象介绍

  • 面向对象编程和面向过程编程的区别:

面向过程编程:
根据需求从上到下编写代码

函数式:将某功能代码封装导函数中,日后再需使用调用即可

面向对象编程:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程

面向对象:按人们认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析,设 计,实现软件的办法.

面向对象编程(Object Oriented Programming-OOP)是一种解决软件复用的设计和编程方法.这种方法把软件系统中相近相似的操作逻辑和操作 应用数据,状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用.

类和对象:

类和对象是面向对象编程中重要的概念

类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

类的组成

  • 类(Class)由3个部分构成

    • 类的名称: 类名
    • 类的属性: 一组数据
    • 类的方法: 允许对进行操作的方法 (行为)
  • 例如:创建一个人类

    • 事物名称(类名):人(Person)
    • 属性:身高(height)、年龄(age)
    • 方法:吃(eat),跑(run)…

类的抽象

具有相同(或者类似)属性和行为的一系列对象的集合都可以抽像出一个类

例:
小明开着他家的宝马去逛街
小明 ->可以抽象出人类
宝马 ->可以抽象出车类

定义类和对象
定义类:

格式

class 类名():
#可不带括号

class Person(object):
	Name = "xiaoli"
	Age = 15
	# 属性
	def Drink(self):
		print("喝水")
	#方法

创建对象:

格式

对象名 = 类名()

#创建一个Car对象,bmw就是Car的对象,对象可以访问属性,调用方法.
a = Person # 创建对象
Person.Drink # 调用Drink方法
print(Person.Name) # 访问类属性

2.实例方法与属性

实例方法
在类的内部,使用 def 关键字可以定义一个实例方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数

class Animal(object):
    def test(self):
    	print("我是实例方法")
    	# 实例方法,使用def关键字定义,第一个形参默认传实例对象本身,一般使用self作为第一个参数
    def show(self):
    	print("Animal.show")
	   	# 一个类里面可以有多个实例方法

属性
类里面定义的变量.定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性

class Animal(object):
    Colour = "white" # 类属性
    def __init__(self):
        self.name = "旺财" # 实例属性

_init_(self)方法

_init_(self) 方法,初始化方法,实例化对象的时候自动调用,完成一些初始化设置。

class Animal(object):
    def __init__(self):
        self.Name = "旺财"
        self.Colour = "白色"
        pass
    pass
Dog = Animal()
print(Dog.Name)
# 结果为打印旺财

__init__传参

如果init方法里面的属性固定了,每个类创建出来的对象属性都一样,这个时候我们是不是考虑将属性当参数在实例化对象的时候传进去,让类更通用?

class Animal(object):
    def __init__(self, Name, Colour):
        self.Name = Name
        self.Colour = Colour
        pass
    pass
Dog = Animal("小黑", "黑色")
print(Dog.Name)
# 结果为打印小黑

理解self

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

class Test(object):
    def GetSelf(self):
        print("self的内存地址为{}".format(id(self)))
        pass
    pass
t = Test()
print(id(t))
t.GetSelf()
# 两者内存地址一致

self传参

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

class Car(object):
	def __init__(self,name,colour):
		self.name = name
		self.colour = colour
	# 创建一个方法打印 self 的id
	def getself(self):
		print('self=%s'%(id(self)))

bmw = Car('宝马','黑色')
# 实例化对象时,self不需要开发者传参,python自动将对象传递给self
print(id(bmw))
bmw.getself()

3.魔法方法

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

__str__方法
直接打印对象,输出结果只一串类似id地址的信息.
例:

class Animal(object):
    def __init__(self, Name, Colour):
        self.Name = Name
        self.Colour = Colour
        pass
    pass
Dog = Animal("小黑", "黑色")
print(Dog)
# 结果为打印内存地址<__main__.Animal object at 0x000001600CC5A970>

加上__str__方法
例:

class Animal(object):
    def __init__(self, Name, Colour):
        self.Name = Name
        self.Colour = Colour
        pass
    def __str__(self):
        return '取名{}颜色{}'.format(self.Name,self.Colour)
    pass
Dog = Animal("小黑", "黑色")
print(Dog)
# 结果为打印取名小黑颜色黑色

注:定义了__str__方法,在打印对象的时候,会执行__str__方法.__str__方法只能return一个字符串.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值