1.对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类
2.类是一种自定义数据类型,用于定义对象的属性和行为。类是对象的蓝图或模板,描述了对象应该具有的特征和行为;
对象:是类的实例化,对象具有类定义的属性和行为,并且可以通过调用类的方法来操作和访问这些属性。
类(Class)的构成:
①类的名称:类名
②类的属性:一组数据
③类的方法:允许对进行操作的方法
#定义类
class Car:
#方法
def getCarInfo(self):
print('车轮子个数:%d,颜色%s'%(self.wheelNum,self.color))\
def move(self):
print("车正在移动...")
#定义一个类
class Animal:
#方法
def __init__(self,name):
self.name=name
def printname(self):
print('名字为:%s'%self.name)
#定义一个函数
def myprint(animal):
animal.printname()
dog1=Animal('O(∩_∩)O')
myprint(dog1)
运行结果:
为更好保存属性安全,不能随意修改
①将属性定义为私有属性
②添加一个可以调用的方法,供调用
class people(object):
def __init__(self,name):
self.__name=name
def getname(self):
return self.__name
def setname(self,newname):
if len(newname)>=5:
self.__name=newname
else:
print("error:名字长度需要大于或者等于5")
xiaoming=people("dongge")
xiaoming.setname("wanger")
print(xiaoming.getname())
xiaoming.setname("lisi")
print(xiaoming.getname())
运行结果:
class Car:
def __init__(self,newWheelnum,newColor):
self.wheelNum=newWheelNum
self.color=newColor
def __str__(self):
msg="我得颜色是" + self.color + "我有" + int(self.wheelNum) + "个轮胎"
return msg
def move(self):
print('车在跑,目标:夏威夷')
BMW=Car(4,"白色")
print(BMW)
#定义类
class car:
#定义的方法
#移动
def move(self):
print('车在奔跑.....')
#鸣笛
def toot(self):
print("车在鸣笛...嘟嘟..")
#创建一个对象
BMW=car()
BMW.color='黑色'
BMW.wheelnum=4 #给对象添加属性
BMW.move()
BMW.toot() #调用对象的方法
print(BMW.color)
print(BMW.wheelnum)
运行结果:
以”烤地瓜“为例的面对对象的编程
#cookedLevel:0~3表示还是生的,超过3表示半生不熟,超过5表示已经考好了,超过8表示已经成木炭了;
#cookedString:描述地瓜生熟程度
#condiments:地瓜的配料列表;
#示例方法
#cook():把地瓜烤一段时间
#addCondiments():给地瓜添加配料
#__init__():设置默认的属性
#__str__():让print的结果看起来更好一些
class SweetPotato:#这是烤地瓜的类
#定义初始方法
def __init__(self):
self.cookedLevel=0
self.cookedString="生的"
self.condiments=[]
#定制print时的显示内容
def __str__(self):
msg=self.cookedString+"地瓜"
if len(self.condiments)>0:
msg=msg+"("
for temp in self.condiments:
msg=msg+temp+","
msg=msg.strip(",")
msg=msg+")"
return msg
#烤地瓜方法
def cook(self, time):
self.cookedLevel += time
if self.cookedLevel > 8:
self.cookedString = "烤成灰了"
elif self.cookedLevel > 5:
self.cookedString = "烤好了"
elif self.cookedLevel > 3:
self.cookedString = "半生不熟"
else:
self.cookedString = "生的"
#添加配料
def addCondiments(self,condiments):
self.condiments.append(condiments)
#用来进行测试
mySweetPotato=SweetPotato()
print("--------有了一个地瓜,还没有烤--------")
print(mySweetPotato.cookedLevel)
print(mySweetPotato.cookedString)
print(mySweetPotato.condiments)
print("----------接下来要进行烤地瓜了---------")
print("---------地瓜经烤了4分钟----------")
mySweetPotato.cook(4) #烤4分钟
print(mySweetPotato)
print("--------接下来要添加配料-番茄酱------")
mySweetPotato.addCondiments("番茄酱")
print(mySweetPotato)
print("-------地瓜又经烤了5分钟---------")
mySweetPotato.addCondiments("番茄酱")
print(mySweetPotato)
print("------接下来要添加配料-芥末酱-------")
mySweetPotato.addCondiments("芥末酱")
print(mySweetPotato)
运行结果:
#定义一个home类
class Home:
def __init__(self,area):
self.area=area #房间剩余的可用面积
#self.light='on' #灯默认是亮的
self.containsItem=[]
def __str__(self):
msg="当前房间可用面积为:"+str(self.area)
if len(self.containsItem) > 0:
msg=msg+"容纳的物品有:"
for temp in self.containsItem:
msg=msg+temp.getName()+","
msg=msg.strip(",")
return msg
#容纳物品
def accommodateItem(self,item):
#如果可用面积大于物品的占用面积
needArea=item.getUsedArea()
if self.area > needArea:
self.containsItem.append(item)
self.area-=needArea
print("ok:已经存放到房间中")
else:
print("err:房间可用面积为:%d,但是当前要存放的物品需要的面积为%d"%(self.area,needArea))
#定义bed类
class Bed:
def __init__(self,area,name='床'):
self.name=name
self.area=area
def __str__(self):
msg='床的面积为:' + str(self.area)
return msg
#获取床的占用面积
def getUsedArea(self):
return self.area
def getName(self):
return self.name
#创建一个新家对象
newHome=Home(100) #100米
print(newHome)
#创建一个床对象
newBed=Bed(20)
print(newBed)
#把床安放到家里
newHome.accommodateItem(newBed)
print(newHome)
#创建一个床对象
newBed2=Bed(30,'席梦思')
print(newBed2)
#把床安放到家里
newHome.accommodateItem(newBed2)
print(newHome)
运行结果: