python自学(十二)——面向对象编程

一、类和实例

类和实例是面向对象编程无法跳过去的一关,python也是如此。

  1. 首先使用class来声明class
    	class Student(object):
    		pass
    
  2. 类的声明,应该遵循规范,首字母大写,括号中指明当前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'>
    
  3. 截止到现在,对象是已经创建完成了,我们需要丰富这个对象,比如,我们给它添加属性和方法,不用我们每次在创建完对象之后再手动的给实例添加,这就要使用到一个特殊的方法__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)
    
  4. 现在来封装一个能够打印每个学生成绩的类
    #!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中实例的属性如果是以两个下滑线开始,那么这么属性就变成了私有属性,就不能在通过 实例.属性 的方式来访问了

  1. 私有属性是 __ 开始
  2. 内部属性是 __ 开始和结束 例:__main__, 这样的属性,可以访问
  3. 还有以 _ 开始的属性,这个虽然不是私有属性,但是结合其他的语言的编程规范,这个虽然没有私有的限制,但是标志这内部属性,告诉其他开发者,不要随意的访问和操作
发布了60 篇原创文章 · 获赞 66 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u012436704/article/details/100006031