类的概念
这是一个和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的基础入门知识就写完啦~完结撒花~ 后续可能会更新数据库的学习笔记,敬请期待~