面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,
而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同
类和实例
定义类
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
def study(self, course_name):
print('%s正在学习%s.' % (self.name, course_name))
- 用关键字class定义类,关键字class后为类型,首字母一般大写。(object)表示从哪个object继承,无继承可不写。
- init是一个特殊方法用于在创建对象时进行初始化操作,第一个参数永远是self,表示创建的实例本身,创建实例时必须传入指定的属性
-
实例创建与使用
tao = Student("tao", "18") # 创建Student实例
tao # <__main__.Student object at 0x10a67a590>
Student # <class '__main__.Student'>
self
在Python的解释器内部,当我们调用tao.study()时,实际上Python解释成Student.study(tao),也就是说把self替换成类的实例,如果定义study函数时不传入self参数,在tao实例调用study方法时,就会报参数错误
self在定义时需要定义,但是在调用时会自动传入。
- self的名字并不是规定死的,但是最好还是按照约定是用self
-
访问可见性问题
在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的(以__打头) ```python class Test:
def init(self, foo):
self.__foo = foo
def __bar(self):
print(self.__foo)
print('__bar')
Test(“test”).bar() # AttributeError: ‘Test’ object has no attribute ‘bar’
实际上python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来妨碍对它们的访问
```python
_Test__bar() # test __bar