面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,
而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同

类和实例

定义类

  1. class Student(object):
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. def study(self, course_name):
  6. print('%s正在学习%s.' % (self.name, course_name))
  • 用关键字class定义类,关键字class后为类型,首字母一般大写。(object)表示从哪个object继承,无继承可不写。
  • init是一个特殊方法用于在创建对象时进行初始化操作,第一个参数永远是self,表示创建的实例本身,创建实例时必须传入指定的属性
  • 函数study为对象的方法

    实例创建与使用

    1. tao = Student("tao", "18") # 创建Student实例
    2. tao # <__main__.Student object at 0x10a67a590>
    3. Student # <class '__main__.Student'>

    self

    在Python的解释器内部,当我们调用tao.study()时,实际上Python解释成Student.study(tao),也就是说把self替换成类的实例,如果定义study函数时不传入self参数,在tao实例调用study方法时,就会报参数错误

  • self在定义时需要定义,但是在调用时会自动传入。

  • self的名字并不是规定死的,但是最好还是按照约定是用self
  • self总是指调用时的类的实例。

    访问可见性问题

    在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的(以__打头) ```python class Test:

    def init(self, foo):

    1. self.__foo = foo

    def __bar(self):

    1. print(self.__foo)
    2. print('__bar')

Test(“test”).bar() # AttributeError: ‘Test’ object has no attribute ‘bar’

  1. 实际上python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来妨碍对它们的访问
  2. ```python
  3. _Test__bar() # test __bar

封装