Python面向对象专题——类和对象

一、面向对象的概念

面向过程:
面向对象是相对于面向过程来说的,面向过程是一种以“过程”为中心的编程思想,分析出解决问题所需的步骤,然后用函数将这些步骤一步步的实现,使用的时候再一个个依次调用就好。
面向对象:
而面向对象是一种以“对象”为中心的编程思想,把问题看出一个个对象,通过对象的属性和行为,将问题解决的。
举例说明两者之间的关系:
面向过程就是和面、揉面、擀面、切面、烧水、下面、盛面、吃面。
面向对象就是先造面,再造人,为人赋予和面、下面、烧水的一系列行为和动作。模拟人类认知世界的能力,收集信息----通过大脑分析抽象----建模----分门别类的一个过程。

二、类的概念

类就是一类事物的统称。
面向对象是以“对象”为基本单元构建系统,对象是把数据和数据操作方法放在一起,作为一个相互依存的整体。把同类的对象抽象出其共性,形成类。所以说,类是对象的抽象,对象是类具体化的体现(类是大范围的,一个类可以有多个对象)。
面向对象的编程就要先造个类,类分为静态与动态。举个例子来说就是一只猫的颜色、体重、肤色、皮毛、年龄为它的静态特征,她的行为就为动态,需要用函数来体现。

三、定义类的方法

#在python中,定义类使用关键字是class
#python的中类名称定义规则和其他编程语言一致,遵循的是大驼峰法
#大驼峰法:所有单词的首字母都大写
class User:  <=>  class User(object):
#这两种写法在Python3中一致,左边的写法等于右边的写法
#也就是Python默认定义的任何类都是object类的子类

1. 类的静态特征的定义:

class User(object):#class 类名称(object):

	#重写方法 __init__(对象初始化函数)
	#self这个参数必须存在,否则不认为类
	#代表的是对象本身,类似于Java里的this关键字
	def __inint__(self):
		#init初始化函数中,定义类的静态特征
		self.username =  "JAY"	#self.属性名称 = 属性值
		self.age = 41
		self.gender = "男"
		self.email = "JAT@qq.com"
		self.telephone = "233333"


u = User()	#此时u这个变量指的就是User这个类所得的对象
		#Python中获取对象:
		#对象名称 = 类名称()  #初始化对象,构建对象
		
print(u)
结果为:<__main__.User object at 0x00000257373EB7F0>
print(u.username)
结果为:jay
#可以在构建完成后,修改对象的属性值
u = User()
u.username = "EDC"
print(u.username)
结果为:EDC
class Dog(object):

	def __init__(self, name, color, age, type):
		#self.xxx指的是类的静态属性
		self.name = name
		self.color = color
		self.age = age
		self.type = type


#创建对象
dog1 = Dog("大黄""黄色", 3, "京巴")
print(dog1.name)
print(dog1.color)
print(dog1.type)
#对象的属性,应该是在对象创建的时候,初始化出来

结果为:
大黄
黄色
京巴

2. 类的动态特征的定义:
3. 类的属性的定义:
4. 类的方法的定义:
5. 通过类来初始化对象:
6. 对象的方法的调用:
7. 对象的属性的调用:

class Cat(object):
	
	def __init__(object, name, gender, color, age, type):
		self.name = name
		self.age = age
		self.color = color
		self.type = type
		self.gender = gender
	#猫不仅有静态属性,它还有自己的动作
	#一般使用一个函数来描述类的一个动态行为
	def speak(self):
		print("我是喵星人")
		print("我的名字叫{},我是{}猫".format(self.name,self.gender))
		#行为动作
		#这里不需要传,因为self绑定的东西是类的,将来得到的对象是属于对象的,而这个方法也是属于对象的
		#在类的方法中,可以直接访问到类的任何属性和方法!

	#方法可以有参数
	def eat(self, food):
		print("本喵在吃饭,请不要打扰我!")
		print("食物是:{}.format(food))"

	#也可以有返回值
	def add(self, x, y):
		return x + y

mimi = Cat("狗", "母", "棕"6, "波斯猫")
#调用猫的speak方法
mimi.speak()		#有参就传参
mimi.eat("精品猫粮")	#没参就不要传参
res = mimi.add(10, 20)	#有返回值请接收它
print(res)

结果为:
我是喵星人
我的名字叫狗,我是母猫

四、魔法方法

mimi = Cat("狗", "母", "棕"6, "波斯猫")
#调用猫的speak方法
mimi.speak()  #有参就传参
mimi.eat("精品猫粮") #没参就不要传参
res = mimi.add(10, 20) #有返回值请接收它
print(res)

mimi.gender = "公"
mimi.name = "猫"

print(mimi.gender + mimi.name)

如果需要修改打印值,这样的输出方法随着输出内容的增多会变得十分繁琐,于是我们可以使用Python默认的魔法方法。

	def __str__(self):
	"""这是一个默认的魔法方法,有特殊含义"""
	"""快速在控制台上查看对象的属性"""
		return "【 name="+ self.name +", age="+ str(self.age) +", gender="+  self.gender +"】"

mimi = Cat("狗", "母", "棕", 6, "波斯猫")
#调用猫的speak方法
mimi.speak()		#有参就传参
mimi.eat("精品猫粮")	#没参就不要传参
res = mimi.add(10, 20)	#有返回值请接收它
print(res)

mimi.gender = "公"
mimi.name = "小疙瘩"

print(mimi)

五、面向对象的简单案例

使用面向对象来求圆的面积与周长:

import math


class Circle(object):

    def __init__(self, r):
        self.r = r

    def get_area(self):
        return math.pi * self.r * self.r

    def get_cal(self):
        return math.pi * self.r * 2


if __name__ == '__main__':
    # main 作测试的,这里面的代码不会导入到其他模块中
    r = float(input("请输入圆的半径:"))
    c1 = Circle(r)
    area = c1.get_area()
    cal = c1.get_cal()
    print("半径为{}的圆的周长是{},面积是{}".format(r, cal, area))
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值