欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解python中的面向对象

程序员文章站 2022-03-11 14:51:01
文章目录类和对象定义一个类对象的创建类的属性类和对象类的概念:类就是具有一定共同特征的事物的统称,比如人类,两条腿能够独立思考吃饭说话,都归为人类。对象的概念:抽象出来,能够吃饭做事的某一个人,比如张三,他就是类的对象,那么实例化一个对象就比如汽车,四个*加油能跑,这是汽车类,那么奔驰宝马奥迪,就是汽车类的实例化对象,类有着对象的属性。定义一个类#使用class关键字,类的第一个字母要大写class Ren: name = '张三' sex = '男' high = '...

定义一个类

# 定义一个类
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