zoukankan      html  css  js  c++  java
  • python学习十二(面向对象)

     对象(object)
    面向对象(oop)
    - python是一门面向对象的编程语言
    - 面向对象的语言,就是编程语言中的所有操作都是通过对象来进行的
    - 面向过程的编程的语言
    - 面向过程指的是,将我们程序的逻辑分解为一个一个的步骤,通过对每个步骤的抽象,来完成程序
    - 面向过程的编程思想将一个功能分解为一个一个的小步骤,我们通过完成一个一个的小步骤来完成一个程序
    - 这种编程方式,符合人类的思维,编写起来相对比较简单
    - 但是这种方式编写的代码只适用于一功能,并且难于维护
    - 面向对象对象的编程语言
    - 面向对象的编程语言,关注的是对象,而不关注过程
    - 对于面向对象的语言来说,一切都是对象
    - 面向对象的编程思想,将所有的功能统一保存到对应的对象中,要完成某个对象,直接找到对应的对象即可
    - 这种方式编写的代码,比较容易阅读,并且易于维护
    - 但是这种方式编写,不太符合常规的思维,编写起来稍微麻烦
    类(class)
    - python内置对象(数字,元组,字典,列表,字符串...)
    - 但是内置对象并不能满足所有的需求,所有在开发时经常需要自定义一下对象
    - 类
    - 相当于一个图纸,在程序中我们需要根据类来创建对象
    - 像int(),bool(),str()list()dict()...这些都是类
    - a = int(20) #创建一个int类的实例
    - 我们自定义的类都需要使用大写字母开头
    - 类也是一个对象(一切皆是对象的原则)!

    类的简介
    定义一个简单的类,使用class关键字来定义类,
    语法:
    class 类名([父类]):
    代码块

    class MyClass(): # 空对象
    pass
    print(MyClass)
    使用MyClass创建一个对象
    使用类来创建对象,就像调用一个函数一样
    mc = MyClass() # mc就是通过MyClass创建的对象,mc就是MyClass的实例
    print(mc,type(mc))

    isinstance()用来检查一个对象是否是一个类的实例
    class MyClass(): # 空对象
    pass
    mc = MyClass()
    mc2 = MyClass
    print(mc,type(mc))
    r = isinstance(mc,mc2) # 判断是否是一类的实例
    print(r)

    现在我们通过MyClass这个类创建的对象就是一个空对象
    可以向对象中添加变量,对象中的变量称为属性
    语法:对象.属性名 = 属性值(可以是任意类型包括函数)
    class MyClass():
    pass
    mc = MyClass
    mc.name = "jkd" # 对象.属性名 = 属性值
    print(mc.name)

    定义类型:
    - 所有的事物都由两部分构成:
    1.数据(属性)
    2.行为(方法)
    - 在类的代码块中,我们可以定义变量和函数,
    变量会成为该类实例的公共属性,所有的该类实例都可以通过 对象.属性名 的形式访问
    函数会成为该类实例的公共方法,所有该类实例都可以通过 对象.方法名() 的形式调用方式
    - 注意:
    方法调用时,第一个参数由解释器自动传递,所以定义方法时,至少要定义一个形参!

    - 实例为什么能访问到类中的属性和方法
    类中定义的属性和方法都是公共的,任何该类实例都可以访问
    - 属性和方法查找的流程
    当我们调用一个对象的属性是,解释器会先在当前对象中寻找是否含有该属性,
    如果没有,则去返回当前对象的属性值,
    如果没有,则去当前对象的类对象中去寻找,如果有就返回类对象的属性值,
    如果还是没有则报错!
    - 类对象和实例对象中都可以保存属性(方法也一样)
    - 如果这个属性(方法)是所有的实例共享的,则应该将其保存到类对象中
    - 如果这个属性(方法)是某个实例独有的,则应该保存实例对象中

    - 一般情况下,属性保存实例对象中,方法保存到类对象中

    class Person():
    # 在类的代码块中,我们可以定义变量和函数
    # 在类的我们定义的变量,将会成为所有实例的公共属性,所有实例都可以访问这些变量
    name = "swk" # 公共属性,所有实例都可以访问

    # 在类中也可以定义函数,类中定义的函数,称为方法,这些方法可以通过该类的所有实例来访问
    def say_hello(s,i):
    return ("hello %s " %i)

    p1 = Person()
    p2 = Person()
    print(p1.say_hello("swk"))
    print(p2.name)

    创建对象的流程:
    p1 = Person()的运行过程
    1.创建一个变量
    2.在内存中创建一个新对象
    3.__init__(self)方法执行
    4.将对象的id赋值给对象

    类的基本结构:
    class ;类名([父类]):
    公共属性...
    # 对象的初始化方法
    def __init__(self,...):
    代码块
    # 其他的方法可以是多个
    def method_1(self,...):
    .....
    .....

    class Person:
    def __init__(self,name):
    self.name = name
    def st(self):
    return ("大家好,我是%s"%self.name)

    p1 = Person("swk")
    p2 = Person("zbj")
    p3 = Person() # 这个因为没有赋初始化的值,会报错
    print(p1.st())
    print(p2.st())
    print(p3.st())

    - 练习:
    尝试自定义一个表示狗的类(Dog)
    属性:
    name,age,gender,height
    方法:
    cry()
    class Dog():
    def __init__(self,name,age,gender,height):
    self.name = name
    self.age = age
    self.gender = gender
    self.height = height
    def cry(self):
    return (self.name,"在叫")

    p1 = Dog("小黑",8,"male",30)
    p2 = Dog("旺财",9,"male") # 报错,默认值没有填满
    print(p1.cry())
    print(p2.cry())
    现在我们需要一种方式来增强数据的安全性
    1.属性不能随意修改
    2.属性不能修改为任意的值(如:年龄不能是负数)


    重写:
    # 如果在子类中如果有和父类同名的方法,则通过子类实例去调用方法时,会调用子类的方法而不是父类的方法,
    这个特点称为方法的重写

    class Animal: # 父类
    def run(self):
    print("在跑")
    def sleep(self):
    print("睡觉")

    class Dog(Animal): # Animal的子类
    def bark(self):
    print("叫")
    def run(self):
    print("狗跑")

    Dog = Dog()
    Dog.run()

    # 当调用这个对象的方法时,会优先在当前对象中寻找是否具有该方法,如果有则直接调用
    如果没有,则区去当前对象的父类中寻找,如果还是没有就往在上级对象中寻找

    class A(object):
    def test(self):
    print("AAA")
    class B(A):
    pass
    class C(B):
    pass

    C = C()
    C.test()
  • 相关阅读:
    对于未来的搜索引擎的思考!
    [转]《C陷阱与缺陷》读书笔记——前车之覆,后车之鉴
    C语言深度解剖笔记
    感觉压力挺大的!!
    发现中国的代理服务器很少
    我的博客搬家了
    [转]22+1条经典的编程引言
    [转]想象五年之后的你
    什么叫做卷积
    《30天自制操作系统》读书笔记(1)读前感
  • 原文地址:https://www.cnblogs.com/wangwen022/p/11388284.html
Copyright © 2011-2022 走看看