Python面向对象
Posted 良人仍未归~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面向对象相关的知识,希望对你有一定的参考价值。
#最近在根据廖雪峰老师的python学习课程学习,以下是在学习过程中做的一些学习总结
1、面向对象简介
在一个python程序中会存在很多的函数,多个函数组成一个类,多个类构成一个程序。
类(class):一个具有相同方法和属性的集合。
通过class来声明一个类,类名呢首字母需要大写
数据成员:类变量、实例变量
继承:即一个新类继承一个现有的class,被继承的被称为父类、基类、超类(base class 、super class)
方法:类中定义的函数
对象:类定义的属性和方法;对象是类的实例
2、创建一个类
class ClassName(object): pass
(object) 表示该类是从哪一类继承下的,如果没有合适继承的类,则可以使用object,这是所有类最终都会继承的类。
实例:
class ClassName(object): def __init__(self,name,age): self.name = name self.age = age def print_init(self): print(‘%s :%s‘ % (self.name,self.age))
1、__init__:是一种特殊方法,他并不执行而是为ClassName类设置一个必须的属性
2、print_init():是ClassName的一个方法
运行
>>>bart = Student(‘bart‘,25) >>>bart.name ‘bart‘ >>>bart.age 25
3、当__init__执行时实例就已经创造,bart就是一个实例
3、继承
比如我们已经有了一个类
class Animal(object): def func(self): print(‘Animal‘)
我们还需要编写其他类时:
class Dog(Animal): pass class Cat(Animal): pass
我们新创建的子类,也就是Dog,Cat,如果我们运行会出现什么?
>>>dog=Dog() >>>dog.run() Animal >>>cat=Cat() >>>cat.run Animal
子类继承父类的所有方法。虽然子类没有定义方法,但是父类定义了run()方法,所以子类也同样具有run方法。
当然,我们也可以对子类进行一些修改:
class Dog(Animal): def run(self): print(‘Dog‘) class Cat(Animal): def run(self): print(‘Cat‘)
我们在子类中声明一个run()方法,再次运行:
>>>dog=Dog() >>>dog.run() Dog >>>cat = Cat() >>>cat.run() Cat
可以看出执行了子类中定义的方法。当子类和父类都存在run()方法时,子类的方法覆盖了父类,在代码运行时总会调用子类这样就构成了多态
4、多态
什么是多态呢?多态就是只要是继承父类或其子类的,该方法就会自动调用父类定义的方法
class Animal(object): def run(self): print(‘Animal is running‘) def run_twice(animal): animal.run() animal.run()
当我们运行run_twice()函数并调用父类方法:
>>>run_twice(Animal) Animal is running Animal is running
你会发现任何依赖Animal的函数或方法都可以不用修改的运行,就是因为多态。
python作为一个动态语言不一定需要传入Animal类型,我们只需要保证对象有一个run()方法即可;这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。
以上是关于Python面向对象的主要内容,如果未能解决你的问题,请参考以下文章