一、使用类和实例

我们先编写一个学生的类,它存储了有关学生的信息,还有一个整合学生信息的方法:

student.py

class Student():

    def __init__(self,name,age):
"""初始化学生信息"""
self.name = name
self.age = age def get_desc(self):
"""得到学生的描述信息"""
long_name = str(self.age) + ' ' + self.name
return long_name stu1 = Student('joker',18)
print(stu1.get_desc())

console:

解释:__init__() 用于初始化实例的属性,在get_desc() 中,使用了self.name 和 self.age 用户访问此实例中的属性,用来打印学生的基本信息。

二、给属性赋默认值以及修改属性的值

类中的每个属性都必须有初始值,就算它是0或者空字符串,那也必须要有。一般情况下我们使用__init__() 用于初始化,但如果有属性

在__init__() 中已被赋与初始值,则在实例化对象时,无需包含为它提供初始值的形参。

student.py

 class Student():

     def __init__(self,name):
"""初始化学生信息"""
self.name = name
self.age = 0 def get_desc(self):
"""得到学生的描述信息"""
long_name = str(self.age) + ' ' + self.name
return long_name stu1 = Student('joker')
print(stu1.get_desc())
stu1.age = 18
print(stu1.get_desc())

console:

解释:

  现在,在Python调用__init__() 来创建新实例时,只需要传入姓名即可实例化对象,因为第六行代码,给age 赋予了初始值,且init方法中也只需要除self外一个name形参,所以第一次打印的年龄为0,再看第15行代码,我们用这种方式给age重新赋值18,所以第二次打印的年龄是18,所以,如果我们需要修改对象中的属性可以使用这种方式,但却不是最好的方式。

  接下来使用第二种方式:用方法给属性赋值:

student.py

 class Student():

     def __init__(self,name):
"""初始化学生信息"""
self.name = name
self.age = 0 def get_desc(self):
"""得到学生的描述信息"""
long_name = str(self.age) + ' ' + self.name
return long_name def update_age(self,new_age):
"""用于更新学生的年龄"""
self.age = new_age stu1 = Student('joker')
print(stu1.get_desc())
stu1.update_age(19)
print(stu1.get_desc())

console:

解释:

  我们在类中,新增了一个用于更新学生年龄的方法,需要传入一个新的年龄,方法将把这个新的年龄,重新赋值给age来完成age的更新。在第19行代码中我们传入19,然后打印出的信息确实显示了我们所传入的年龄,即用方法更新属性的值是可行的。其实,这种方式是我们常用的,一般情况下,我们不会直接访问类中的属性,所以需要用方法来做“中间人”,因为这样,我们可以在方法中做一些额外的操作,比如在重新赋值前先判断年龄是否非法(负数),如果非法就不改变原先属性值或将原先的值设置为默认值。

  友谊是如此的甜美稳固忠诚,又至死不渝的神圣情感,只要他们不跟你借钱

最新文章

  1. sql 2012日志文件频繁出现:svchost (4892) 数据库引擎已分离数据库(1、C:\Windows\system32\LogFiles\Sum\Current.mdb)
  2. map的使用
  3. javac编译、运行
  4. HDU 4123 (2011 Asia FZU contest)(树形DP + 维护最长子序列)(bfs + 尺取法)
  5. PHP 调试用函数
  6. SQL语句基础之 单表查找
  7. wp8 在OnBackKeyPress事件中调用MessageBox.Show()崩溃
  8. PHP算法 《树形结构》 之 伸展树(1) - 基本概念
  9. (转)iOS7界面设计规范(7) - UI基础 - 交互性与反馈
  10. perl lwp 获取请求头
  11. 用django搭建一个简易blog系统(翻译)(三)
  12. Leetcode题解(27)
  13. 获取数据库时间sql 以及行级锁总结-共享锁-排他锁-死锁
  14. 函数的形参和实参之arguments对象
  15. spring整合mybatis接口无法注入问题
  16. 并发研究之CPU缓存一致性协议(MESI)
  17. textbox 未
  18. IntelliJ IDEA启动Tomcat后,却无法访问Tomcat主页 等一系列问题
  19. numpy nan值的判断
  20. day 06云计算的三种服务模式:IaaS,PaaS和SaaS

热门文章

  1. PowerDesigner 16.5的下载安装破解注册(图文详解)
  2. jquery $.trim()方法的介绍
  3. Python 教程资源
  4. [BJOI2017]魔法咒语
  5. AtCoder Grand Contest 016 F - Games on DAG
  6. Android课程设计第一天Android Studio安装
  7. 题解报告:NYOJ #78 圈水池(打印凸包顶点)
  8. 492 Construct the Rectangle 构建矩形
  9. POJ 3522 Slim Span 暴力枚举 + 并查集
  10. php,json数据传输(无刷新)