码迷,mamicode.com
首页 > 编程语言 > 详细

十一、Python之面向对象

时间:2018-01-27 22:14:39      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:不同   报错   sub   teacher   状态   方法   acl   markdown   div   

1.概念

1)面向过程与面向对象
    面向过程,核心是过程二字,过程即解决问题的步骤,就是先干什么再干什么
    基于该思想写程序好比在设计一条流水线,是一种机械式的思维方式
    优点:复杂的过程流程化,进而简单化
    缺点:扩展性差

    面向对象,核心是对象二字,对象是特征与技能的结合体
    基于该思想写程序就好比在创造世界,世界是由一个个对象组成,是一种’上帝式‘ 的思维方式
    优点: 可扩展性强
     缺点: 编程复杂高,容易出现过度设计

2) 类
    对象是特征与技能的结合体,类就是一系列对象相似的特征与技能的结合体
    在现实世界中:一定是先有一个个具体存在的对象,后总结出的类
    在程序中: 一定保证先定义类,后产生对象

3) 实例化
    调用类的过程又称为实例化

2.类(Class)程序实例

1)定义一个Student类

class Student:
    school = ‘oldboy‘

    def learn(self):
        print(‘is learning‘)

    def choose_course(self):
        print(‘choose course‘)
    print(‘======run‘)

#函数只有在调用时才能运行,而类体代码在类定义时就能执行
print(Student.__dict__)

#查看属性
print(Student.school)   #类的数据属性
print(Student.learn)    #类的函数属性

#增加属性
Student.country = ‘china‘
print(Student.country)

#修改属性
Student.school = ‘Oldboy‘
print(Student.school)

#删除属性
del Student.country
#print(Student.country)  #删除后就访问不到,则会报错

Student.learn(‘AAAA‘)   #必须传值,才能执行

2)定义一个Teacher类

class Teacher:
    school = ‘oldboy‘
    count = 0
    def __init__(self,name,sex,age,level,salary):
        self.name = name
        self.sex = sex
        self.age = age
        self.level = level
        self.salary = salary
        Teacher.count+=1
    def teach(self):
        print(‘%s is teaching‘ %self.name)

t1 = Teacher(‘张三‘,‘male‘,18,10,3000)
t2 = Teacher(‘李四‘,‘male‘,38,9,30000)
t3 = Teacher(‘王五‘,‘male‘,29,9,30000)

#通过调用实例下的name打印老师名字
print(t1.name)  #张三
print(t2.name)  #李四
print(t3.name)  #王五

#调用任何一个实例,count都是老师的总个数
print(t1.count) #3
print(t2.count) #3
print(t3.count) #3

3.类的继承与派生

在Python2中类分为2种:
    1.经典类
    2.新式类:指的是继承object类的类,以及该类的子类

在Python3中只有新式类,默认会继承object类的类,以及该类的子类
=================================================
Python2                                 Python3
class Parten1(object)         等同于 class Partent1()
=================================================

class Parent2:
    pass

class Sub1(Parent1):
    pass

class Sub2(Parent1,Parent2):
    pass

#Sbu1 继承了Parent1
print(Sub1.__bases__)

#Sub2 继承了Paren1 Parent2
print(Sub2.__bases__)

#默认会有继承 object
print(Parent1.__bases__)    #(<class ‘object‘>,)
print(Parent2.__bases__)    #(<class ‘object‘>,)

4.多态与多态性

多态:同一种事物的多种形态,对于动物来说,动物都能叫,但是可能内容不同,即呈现出来的状态不同

import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractclassmethod
    def speak(self):
        pass

class Pig(Animal):
    def speak(self):
        print(‘哼哼‘)

class Dog(Animal):
    def speak(self):
        print(‘汪汪‘)

dog=Dog()
pig=Pig()

#dog、pig都是动物,只要是动物肯定有talk方法,于是我们可以不用考虑它们具体是什么类型,而直接使用
    dog.talk()
    pig.talk()

#更进一步,我们可以定义一个统一的接口来使用
def func(obj):
    obj.talk()

十一、Python之面向对象

标签:不同   报错   sub   teacher   状态   方法   acl   markdown   div   

原文地址:https://www.cnblogs.com/liaor/p/8367257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!