详解python中的面向对象
文章目录
定义一个类
# 定义一个类
class Dog():
pass
# 实例化一个类
d1 = Dog()
d2 = Dog()
# 给实例赋予一个属性name
d1.name = '大黄'
print(d1.name)
在__init__()方法中添加属性
# 定义一个类
class Dog():
def __init__(self,name,height,blood,power):
self.name = name
self.height = height
self.blood = blood
self.power = power
# 实例化一个类并给属性赋值
d1 = Dog('大黄',0.7,10,3)
d2 = Dog('二黑',0.5,10,4)
# 输出实例的属性值
print d1.name
print d2.name
self和默认属性
self就代表当前实例,在我们创建实例的时候,模板中的self就代表了我们的实例,我们可以通过self访问当前实例的属性、调用当前实例的方法:
# 定义一个模板
class Dog():
# 构造方法
def __init__(self,name,height,blood,power):
# 此时self代表了我们要定义的实例
self.name = name
self.height = height
self.blood = blood
self.power = power
# 实例化一个类并给属性赋值
d1 = Dog('大黄',0.7,10,3)
d2 = Dog('二黑',0.5,10,4)
# 输出实例的属性值
print d1.name
print d2.name
- 默认属性
在我们起初定义方法的时候,会有默认属性存在,比如说血量,一开始就是满血10滴,所以它就是默认属性,我们不需要在方法的参数中给它传值,直接在方法的属性中定义好即可:
# 定义一个模板
class Dog():
# 构造方法
def __init__(self,name,height,power):
self.name = name
self.height = height
# 设置血量为默认属性,值为10
self.blood = 10
self.power = power
# 实例化一个类并给属性赋值
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)
# 输出实例的属性值
print d1.name
print d2.name
print d1.blood
print d2.blood
访问属性和修改属性
这个挺简单的,print输出实例属性,随后再给实例属性重新赋值:
# 定义一个模板
class Dog():
# 构造方法
def __init__(self,name,height,power):
self.name = name
self.height = height
# 设置血量为默认属性,值为10
self.blood = 10
self.power = power
# 实例化一个类并给属性赋值
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)
# 输出实例的属性值
print d1.power
# 修改实例的属性
d1.power = 9999
# 输出
print d1.power
创建实例和创建多个实例
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/10/23 16:28
# @Author : Shadow
# @Site :
# @File : 简单的类.py
# @Software: PyCharm
# 定义一个模板
class Dog():
# 构造方法
def __init__(self,name,height,power):
self.name = name
self.height = height
# 设置血量为默认属性,值为10
self.blood = 10
self.power = power
# 创建多个实例
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)
# 输出实例的属性值
print d1.name
print d2.name
# 用id()输出实例的内存地址
print id(d1)
print id(d2)
添加和使用方法
现在我们要让大黄二黑开始报自己的各项数据,所以添加一个方法bark():
# 定义一个模板
class Dog():
# 构造方法
def __init__(self,name,height,power):
self.name = name
self.height = height
# 设置血量为默认属性,值为10
self.blood = 10
self.power = power
# 添加一个方法bark
def bark(self):
print '我是{},身高{},攻击力{},血量{}'.format(self.name,self.height,self.power,self.blood)
# 创建多个实例
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)
# 使用构造的方法
d1.bark()
d2.bark()
光叫也没劲,我们构造一个attack()方法来让他们打一架吧!
# 定义一个模板
class Dog():
# 构造方法
def __init__(self,name,height,power):
self.name = name
self.height = height
# 设置血量为默认属性,值为10
self.blood = 10
self.power = power
# 添加一个方法bark
def bark(self):
print '我是{},身高{},攻击力{},血量{}'.format(self.name,self.height,self.power,self.blood)
# 再添加一个attack()方法来执行攻击这个行为
def attack(self,dog):
dog.blood = dog.blood-self.power
if dog.blood > 0:
print '{}的剩余血量为:{}'.format(dog.name,dog.blood)
else:
print '{}击杀了{}!'.format(self.name,dog.name)
# 创建多个实例
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)
# 修改d1的攻击力
d1.power = 999
# 使用构造的方法
d1.bark()
d2.bark()
# 使用attack()方法让d1攻击d2,并输出d2的状态
d1.attack(d2)
通过方法改变属性
即定义一个可以修改实力属性的方法,血量最低为0,不能出现负值,修改后的代码:
# -*- coding: gbk -*-
# 定义一个模板
class Dog():
# 构造方法
def __init__(self,name,height,power):
self.name = name
self.height = height
# 设置血量为默认属性,值为10
self.blood = 10
self.power = power
# 添加一个方法bark
def bark(self):
print '我是{},身高{},攻击力{},血量{}'.format(self.name,self.height,self.power,self.blood)
# 修改attack方法,在attack中调用reduce_blood方法
def attack(self,dog):
dog.reduce_blood = dog.reduce_blood(self.power)
if dog.blood > 0:
print '{}的剩余血量为:{}'.format(dog.name,dog.blood)
else:
print '{}击杀了{}!'.format(self.name,dog.name)
# 构造一个可以修改实例属性值的方法reduce_blood
def reduce_blood(self,reduce_value):
if reduce_value > self.blood:
self.blood = 0
else:
self.blood = self.blood - reduce_value
# 创建多个实例
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)
# 使用构造的方法
# d1.bark()
# 通过方法reduce_blood()修改属性
d1.attack(d2)
# 输出详细属性
d2.bark()
综合练习
汽车
创建一个名为Car的类,其方法__init__() 设置两个属性:name和brand(品牌)。
定义一个名为show()的方法,功能是打印出汽车的名称和品牌。
定义一个名为run()的方法,打印:汽车XX跑起来了。其中XX表示汽车的name.
根据这个类创建一个名为car的实例,先通过属性直接打印其两个属性,再调用上面的两个方法。
# -*- coding: gbk -*-
# 创建一个名为Car的对象
class Car:
# 构造__init__方法传值并输出name和brand
def __init__(self,name,brand):
self.name = name
self.brand = brand
# 构造show方法来输出实例的属性值
def show(self):
print self.name
print self.brand
# 构造run方法来让汽车跑起来
def run(self):
print '{}跑起来了~'.format(self.name)
# 直接输出实例的属性
car = Car('Evo','Mitsubishi')
print car.name,car.brand
# 通过上面两个方法输出实例的属性
car.show()
car.run()
5辆汽车
根据在练习1而编写的类创建5个实例,并对每个实例调用show方法。
# -*- coding: gbk -*-
# 创建一个名为Car的对象
class Car:
# 构造__init__方法传值并输出name和brand
def __init__(self,name,brand):
self.name = name
self.brand = brand
# 构造show方法来输出实例的属性值
def show(self):
print self.name
print self.brand
# 构造run方法来让汽车跑起来
def run(self):
print '{}跑起来了~'.format(self.name)
# 创建5个实例,并对每个实例调用show方法
car1 = Car('Evo','三菱')
car2 = Car('翼豹','斯巴鲁')
car3 = Car('Type-R','丰田')
car4 = Car('C63','奔驰')
car5 = Car('GT-R','日产')
# 调用方法
car1.show()
car2.show()
car3.show()
car4.show()
car5.show()
Pig
创建一个名为Pig的类,其中包含属性name和weight
定义一个名为show()方法,打印Pig的基本信息;
再定义一个名为run() 的方法,打印:‘XX: 没吃过猪肉,让你看看猪跑!’。
创建多个表示不同猪的实例,并对每个实例都调用上述两个方法。
# -*- coding: gbk -*-
# 创建Pig类
class Pig:
# 构造__init__方法进行传值
def __init__(self,name,weight):
self.name = name
self.weight = weight
# 构造show方法打印基本信息
def show(self):
print '你好!我是{},我{}kg~'.format(self.name,self.weight)
# 构造run方法输出题目要求内容
def run(self):
print '{}:没吃过猪肉,让你看看猪跑~'.format(self.name)
# 实例化多个对象
pig1 = Pig('佩奇',90)
pig2 = Pig('乔治',60)
# pig1调用两个方法
pig1.show()
pig1.run()
# pig2调用两个方法
pig2.show()
pig2.run()
就餐人数
在为完成练习1的Car类中,添加一个名为number_of_people的属性,并将其默认值设置为0。添加一个名为max_people的属性,表示车上最多可以有几个人。修改相应的构造方法,传入max_people的值。
添加一个名为set_people() 的方法,它让你能够设置车上的人数,但是不能超过max_people的限制。
添加一个名为increase_people()的方法,每次调用这个方法就会让车上的人数加1,但是不能超过max_people的限制。
添加一个名为reduce_people()的方法,每次调用这个方法就会让车上的人数减少1,但是最多减少为0.
根据这个类创建一个名为car的实例,先通过属性直接打印其两个属性,再调用上面的两个方法。;打印有多少人在车上,然后多次调用以上3个方法,并打印车上的人数。
# -*- coding: gbk -*-
# 创建一个名为Car的对象
class Car:
# 构造__init__方法传值并输出name和brand
def __init__(self,name,brand,max_people=5):
self.name = name
self.brand = brand
self.max_people = max_people
self.number_of_people = 0
# 构造show方法来输出实例的属性值
def show(self):
print '{}:当前车内人数为:{}'.format(self.name,self.number_of_people)
# 构造run方法来让汽车跑起来
def run(self):
print '{}跑起来了~'.format(self.name)
# 构造set_people方法,设置车内初始人数
def set_people(self,people):
if people <= self.max_people:
self.number_of_people = people
else:
print '超载啦!'
# 构造increase_people方法,每次调用车内人数加一
def increase_people(self):
if self.number_of_people+1 <= self.max_people:
self.number_of_people = self.number_of_people+1
else:
print '超载啦!'
# 构造reduce_people方法,每次调用车内人数减一
def reduce_people(self):
if self.number_of_people-1 >= 0:
self.number_of_people = self.number_of_people-1
else:
print '车里已经没人了!'
# 实例化对象car
car = Car('Evo','三菱',5)
# 通过属性实例直接打印出属性name和brand
print car.name,car.brand
# 调用题目中要求的方法,并输出车内人数
car.increase_people()
car.reduce_people()
car.show()
# 按照题目要求,多次调用以上3个方法,并打印车内人数
car.set_people(5)
car.reduce_people()
car.increase_people()
car.reduce_people()
car.reduce_people()
car.increase_people()
car.reduce_people()
car.show()
car.set_people(5)
car.reduce_people()
car.increase_people()
car.reduce_people()
car.show()
car.run()
本文地址:https://blog.csdn.net/qq_43573676/article/details/108735176