一、类和实例
类和实例是面向对象编程无法跳过去的一关,python也是如此。
- 首先使用class来声明class
class Student(object): pass
- 类的声明,应该遵循规范,首字母大写,括号中指明当前class的父类,和js一样,最终所有的类都指向了object,从下面可以看到,我们打印由Student创建的对象tom时,能够看到它的父类信息和它对应的物理地址
#!usr/bin/env python3 class Student(object): pass tom = Student() print(tom) print(Student) // 在pycharm中执行的 >> <__main__.Student object at 0x10f8730f0> >> <class '__main__.Student'>
- 截止到现在,对象是已经创建完成了,我们需要丰富这个对象,比如,我们给它添加属性和方法,不用我们每次在创建完对象之后再手动的给实例添加,这就要使用到一个特殊的方法__init__,在类的定义的时候,来对对象进行初始化:
#!usr/bin/env python3 class Student(): def __init__(self, name, score): //这里的第一个参数self是必须要带的,这也是和函数的不同点 self.name = name self.score = score tom = Student("tom", 100) print(tom.name) // tom print(tom.score) // 100 print(Student)
- 现在来封装一个能够打印每个学生成绩的类
#!usr/bin/env python3 class Student(): def __init__(self, name, score): self.name = name self.score = score def getScore(self): if self.score < 60: print("%s,C:不及格,继续努力" % self.name) elif self.score < 80: print("%s,B:良好" % self.name) elif self.score < 90: print("%s, A:优秀,加油" % self.name) else : print("%s, A+:完美" % self.name) tom = Student("tom", 30) jom = Student("jom", 86) tom.getScore() // tom,C:不及格,继续努力 jom.getScore() // jom, A:优秀,加油
二、访问限制
上一节,对于类我们进行了简单的封装,但是很多时候,我们不希望用户在外部能够访问到内部的属性,而是通过我们暴露出来的方法来访问对应的属性,这里就需要 __ ,在python中实例的属性如果是以两个下滑线开始,那么这么属性就变成了私有属性,就不能在通过 实例.属性 的方式来访问了
- 私有属性是 __ 开始
- 内部属性是 __ 开始和结束 例:__main__, 这样的属性,可以访问
- 还有以 _ 开始的属性,这个虽然不是私有属性,但是结合其他的语言的编程规范,这个虽然没有私有的限制,但是标志这内部属性,告诉其他开发者,不要随意的访问和操作