python学习之面对对象

######面向对象编程    类######
1.编程范式
•面向对象编程——Object Oriented Programming,简称 OOP,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
•面向过程把函数继续切分为子函数,来降低系统的复杂度。基础概念
• 类: 在 Python 中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)。
• OOP首选思考的不是程序的执行流程,而是某个数据类型应该被视为一个对象,这个对象拥有的属性(Property)。
• 方法: 给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。
2.类
面向对象的基础概念
    类:  class 类名:   类名必须首字母大写  pythonic
    方法:构造方法__init__,析构方法__del__(del(a1),或者程序执行结束时运行)
    类变量:
    实例变量:
类的几个特性:
    封装:私有变量,私有方法
    继承:class Cat(Animals):
    多态:当父类的方法与子类的方法名相同时,调用该方法执行子类。
class Student(object):            # 定义类
    def __init__(self, name, score):    # 构造函数,后面跟你要传递的参数,实例过程中执行的操作
        self.name = name            # self就是实例化的变量名,self.name是实例化属性,静态属性
        self.score = score
    def print_score(self):          #方法,与函数唯一的区别是self,动态属性
        print '%s: %d' % (self.name, self.score)
    def __del__(self):             #析构方法__del__,或者程序执行结束时运行
        print "that's all,game over"
a = Student('wangmaomao',80)         #实例化
a.print_score()




class Student(object):              # 定义类
    def __init__(self, name, score):# 构造函数,后面跟你要传递的参数,实例过程中执行的操作
        self.name = name            # self就是实例化的变量名,self.name是实例化属性,静态属性
        self.score = score
    def print_score(self):          # 方法,与函数唯一的区别是self,动态属性
        print '%s: %d' % (self.name, self.score)
#    def __del__(self):             #析构方法__del__,或者程序执行结束时运行
#        print "that's all,game over"
    def info(self):
        print '''
                        student info
              name:%s
              score:%d
              '''% (self.name,self.score)
class Realtion(object):              #类的关联
    def make_friends(self,obj):
        print '%s and %s are firends'%(self.name,obj.name)
class Xy(Student,Realtion):
    def __init__(self,name,age,male):
        super(Xy,self).__init__(name,age)
        self.male = male
    def print_score(self):
        print '%s study hard......' % (self.name)
class Lg(Student,Realtion):
    def print_score(self):
        print '%s eating gutou.......' % (self.name)
a = Xy('wangmaomao',80,'male')          #实例化
b = Lg('hahaha',100)
a.make_friends(b)
a.print_score()
#a.info()



• Class 是一种抽象概念,比如我们定义的 Class——Student, 是指学生这个概念;
• 实例(Instance)则是一个个具体的 Student;
• 面向对象的抽象程度又比函数要高,因为一个 Class 既包含数据,又包含操作数据的方法。
• object表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用 object 类,这是所有类最终都会继承的类。
• 创建实例的方式:student1 = Student()
• 可以自由地给实例变量绑定属性,student1.name,student1.score;
•可定义一个特殊的 __init__ 方法,在创建实例的时候,就把name , score等属性绑上去
• __init__ 方法的第一个参数永远是 self ,表示创建的实例本身;
• 在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self ,并且调用时,不用传递该参数。
3.数据封装
• 数据和逻辑被“封装”起来了,调用很容易,但却不用知道内部实现的细节。
• 封装的另一个好处是可以给类增加新的方法;
4.访问限制
• 在 Python 中,实例的变量名如果以 __ 开头,就变成了一个私有变量(private);
• 双下划线开头的实例变量是不是一定不能从外部访问呢?NO
5.继承和多态
class Animal(object):
def run(self):
print 'Animal is running...'
class Dog(Animal):
pass
class Cat(Animal):
pass
• 对于 Dog 来说,Animal 就是它的父类,对于 Animal 来说,Dog 就是它的子类;
• 继承最大的好处是子类获得了父类的全部功能。
•继承的另一个好处:多态。子类的覆盖了父类的方法。
.获取对象信息
• 使用 type();
• 使用 isinstance();
• 使用 dir()

# 多继承
继承策略:广度优先策略(效率高)python3
    深度优先:C一直找父类的方法,如果没有找到相应的方法,再去找和C在一层的类
    class Cat(Animals,Relation):
            广度优先

            深度优先



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值