Python学习笔记8——面向对象编程基础

本文介绍了面向对象编程中的类和对象概念,通过类比生物分类来解释类的定义和实例化。文中展示了如何在Python中创建类,包括初始化方法`__init__`,以及`self`关键字的使用。还通过示例演示了类的方法、实例变量和类的调用,如动物移动的例子和银行账户操作的模拟。文章强调了类的复用性和封装性,并通过添加条件判断来改进代码逻辑,如防止银行账户透支。
摘要由CSDN通过智能技术生成

类的概念

这是一个和C语言很大的不同的地方,但是没关系,因为我略微涉略过java,虽然C不是面向对象的编程,但是java是,java有对象,所以我觉得还是不难理解的,生活中的任何事物都可以称之为对象,所以程序员当中有个玩笑话是这么说的“程序员没有单身的,因为单身的可以给自己new一个对象”

那么什么是对象,什么是类呢?我觉得大家应该还能记得初中生物学过的界门纲目科属种,这就是类,说的详细一点就是类别,例如猫是一类,狗是一类,人是一类,但是猫和猫不同,比如有波斯猫,狸花猫,这些就是实例,同一个类有共同的特性,但是类里面的实例互不干扰,就比如老虎和猫都属于猫科,但是老虎和猫属于两个不同的实例,他们互不干扰。

dog_x = 0
cat_x = 0
def dog_move():
        global dog_x
        dog_x = dog_x + 10
def cat_move():
    global cat_x
    cat_x = cat_x + 10
user_input = input()
if user_input == 'move':
    print('dog:{},cat:{}'.format(dog_x,cat_x))
    dog_move()
    cat_move()
    print('dog:{},cat:{}'.format(dog_x,cat_x))

代码中函数global()是指以字典形式输出,函数.format()是指以格式化形式输出

运行结果如下:

在上述代码中,我们可以发现,dog_move()和cat_move()非常的相似,除了名字不同,功能一模一样,但是两个互不干扰,因此,我们可以将dog_move()和cat_move()看成是一个类里面的两个实例。

class Animal():
    def _init_(self):
        self.x = 0 
    def move(self):
        self.x += 10
dog = Animal()
cat = Animal()
user_input = input()
if user_input == 'move':
    dog.move()
    cat.move()
    print('Dog position:',dog.x)
    print('Cat position:',cat.x)

这个时候我们可以定义一个类animal,在这个类里面规定初始值和步长,这个时候下次再进行运用,就可以直接调用,类似于调用函数

类的创建和调用

类里面的函数必须有self,类的定义时必须英文首字母大写

class Student():
    def say_hi(self):#self指实例自己
        print('Hello')
lilei = Student()
lilei.say_hi()

运行结果为:

 初始化函数的时候可以加入参数

class Student():
    def __init__(self,user_input_name):
        #初始化函数,添加参数
        self.name = user_input_name
    def say_hi(self):
        print("Hello! I\'m {}.".format(self.name))
lilei = Student("lilei")
lilei.say_hi()
hanmeimei = Student("hanmeimei")
hanmeimei.say_hi()

运行结果如下:

self的使用

class Student(object):
    def __init__(self,name,score): 
        #括号里面是Student类里的默认属性,self是必须的,也必须是第一个,其他的可有可无
        self.name = name
        self.score = score
    def get_score(self):
        #内部函数访问self参数
        print("{}的测试分数为:{}".format(self.name,self.score))
student1  =  Student("lilei","99")
 #实例化时需要输入默认属性相对应的参数
student1.get_score()

运行结果为:

还可以从外部调用

class Student(object):
    def __init__(self,name,score): 
        #括号里面是Student类里的默认属性,self是必须的,也必须是第一个,其他的可有可无
        self.name = name
        self.score = score
student1  =  Student("lilei","99")
 #实例化时需要输入默认属性相对应的参数
#从类外部访问self
print(student1.name)
print(student1.score)

 运行结果为:

类的实例应用

先建立一个类,假设我们需要描述的是一个人,那么我们就建立一个类,类名为Persion,然后在类里面建立一个实例,假设这个人名字叫lilei,那么接下来我们通过编码来感受一下类的实例应用:

class Persion():
    #建立一个类,类名为Persion
    def __init__(self,weight): 
        #初始化实例的体重
        self.weight = weight
    def eat(self,food):
        #假设这个人吃进去多少食物体重就增加多少
        self.weight +=  food
    def excercise(self):
        #假设这个人运动一次体重减少一个固定值
        self.weight -= 0.5
lilei = Persion(80)
print("lilei的初始体重为:{}" .format( lilei.weight))
lilei.eat(1)
print('lilei吃过饭之后的体重为:{}'.format( lilei.weight))
lilei.excercise()
print('lilei运动完之后的体重为:{}' .format( lilei.weight))

运行结果如下;

注意:如果想要直接打印出结果可以直接使用print(lilei.weight),这里因为加了前缀用于提示所以用了format函数

 接下来我们定义一个类,类里面存放关于圆的一些实例,所以我们将类定义为Circle:

class Circle():
    def __init__(self,radius) :
        #初始化实例的半径
        self.radius = radius
    def get_area(self):
        #计算实例的面积并进行返回
        area = 3.1415926 * (self.radius)
        return area
    def get_circumference(self):
        #计算实例的周长并进行返回
        circumference  = 2 * 3.1415926 * self.radius
        return circumference
c1 = Circle(5)
#令圆C1的半径为5
c2 = Circle(10)
#令圆C2的半径为10
total_area = c1.get_area() + c2.get_area()
#计算两个圆的总面积
print(c1.radius)
#打印圆C1的半径
print(c1.get_circumference())
#打印圆C1的周长
print(total_area)
#打印两个圆的总面积

运行结果为:

接下来用单步运行给大家具体展示一下这串代码的运行过程,这有助于大家在初学的时候理解代码;

 大家看,在第一步,我们先运行的是主函数,如果放在C语言里面,那就是先运行main函数,虽然Python中没有写main函数,但是根据缩进可以发现,类是一个模块,相当于一个子函数,运行代码是从主函数,也就是c1 = Circle(5)开始运行的,在运行完之后,是对类的一个应用,就类似于在c语言中的调用子函数,所以这个时候运行的指针跳转到了上面,同时在右边大家可以发现,这个时候radius已经变成了5,说明应用成功。

因为主函数中第一句代码只要求应用类中的半径这个实例,所以在应用结束之后,运行代码的指针跳转到了主函数的第二句代码,也就是给我们的第二个圆赋值半径:

  所以这个时候就已经给圆2初始化了一个我们指定的半径,半径为10。在初始化结束之后继续进行第三句主函数,也就是计算两个圆的总面积:

 因为在计算总面积的时候要分开计算两个圆自己的面积,然后再进行和运算,所以在运行代码的时候我们会发现,指针到了面积实例那边运行了两次,然后才跳转到主函数的打印函数那边。

在执行打印函数的时候,我们在里面输入了指令要求输出的是圆1的周长,但是因为在之前我们没有计算过,只能在代码运行到这一行的时候再执行回去运算一遍,然后通过return函数将最终结果返回出来,然后通过print函数打印出来。 

接来下我们创建一个银行的类,在里面放三个实例实现建立账号,存钱和取钱的功能:

class BankAccount():
    def __init__(self):
        #新建一个银行账户
        self.balance = 0
    def deposit(self,money):
        self.balance += money
        return self.balance
    def withdraw(self,money):
        self.balance -= money
        return self.balance
lilei_bank_account = BankAccount()
print(lilei_bank_account.balance)
lilei_bank_account.deposit(100)
print(lilei_bank_account.balance)
lilei_bank_account.withdraw(60)
print(lilei_bank_account.balance)

运行结果如下:

 但是因为在银行取钱是有条件的,不能取超过银行卡里面的钱,所以我们需要在代码中增添判断条件:

class BankAccount():
    def __init__(self):
        #新建一个银行账户
        self.balance = 0
    def deposit(self,money):
        self.balance += money
        return self.balance
    def withdraw(self,money):
        if money <= self.balance:
         self.balance -= money
        else:
            print('您的账户余额不足……')
        return self.balance
lilei_bank_account = BankAccount()
print(lilei_bank_account.balance)
lilei_bank_account.deposit(100)
print(lilei_bank_account.balance)
lilei_bank_account.withdraw(200)
print(lilei_bank_account.balance)

运行结果:

到这里Python的基础入门知识就写完啦~完结撒花~ 后续可能会更新数据库的学习笔记,敬请期待~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

箬渊凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值