美文网首页
面向对象-极简版

面向对象-极简版

作者: 光明_7c13 | 来源:发表于2019-09-25 19:24 被阅读0次

    一、什么是对象和类

    1. 从现实世界说起

    什么是对象
    现实世界中,任何一个可见,可触及的物体都可以成为对象。
    比如说一辆汽车,一个人,都可以称为对象。
    那每个对象都是有属性和功能(或者说技能)的。

    什么是类

    听人们常说,物以类聚,人以群分。

    从字里行间不难看出,类就是具体很多对象共有属性和共有功能的抽象体。

    这个抽象体,只是一个称谓,代表了具有相同属性和功能的某些对象。

    比如,具体的一辆汽车是一个对象,红色汽车就是这些具有红色车身的汽车的统称,红色汽车就是一个类了。

    相关的例子还有很多,比如 蔬菜是一个类,一个具体的茄子是属于蔬菜这个类的。

    现实世界中是先有对象后有类的。

    二、Python 中一切皆对象

    你可能听说过,在 Python 中一切皆对象。
    在python中,一切皆对象。数字、字符串、元组、列表、字典、函数、方法、类、模块等等都是对象,包括你的代码。
    之前也提到过,Python 中的对象都有三个特性

    • id
      标识了一个对象的唯一性,使用内置函数 id() 可以获取到
    • 类型
      表明了这个对象是属于哪个类, 使用内置函数 type() 可以获取到

    • 就是这个对象的本身,可以使用内置函数 print() 看到,这个看到的是 Python 让你看到的一个对象特有的表现方式而已。

    三、创建类

    类名的第一个字母需要大写,这是规范。

    class Foo:
        pass
    

    四、实例化对象

    定义类

    class Car():
        color = 'red'  # 属性
        def travel(self):   # 方法
            pass
    

    实例化一个对象

    Car()  # 没有起名字
    
    mycar = Car()  # 起了个名字 mycar
    

    五、属性

    类的属性分为类的数据属性(key=value)和函数属性
    类的实例只有数据属性(key=value)

    class Person():
        city = "BeiJing"             # 类的数据属性
        def __init__(self, name,age):
            self.name = name   # 实例对象的数据属性
            self.age = age
        def run(self):  # 类的函数属性
            pass
    

    类属性可以被类和对象调用, 是所有对象共享的
    实例属性只能由对象调用

    六、对象的初始化方法 __init__()

    对象的初始化方法是用于实例化对象时使用的。

    方法的名称是固定的 __init__()

    当进行实例化的时候,此方法就会自动被调用。

    class AP():
        area = '蓝方'  # 类的属性   -- 类的数据属性
    
        def __init__(self, name, hp=690, atc=78):  # 类的函数属性
            self.name = name  # 对象的属性
            self.hp = hp
            self.atc = atc
    
    zj = AP("甄姬")
    xq = AP("小乔")
    

    七、方法

    凡是在类里定义的函数都都称为方法

    方法本质上是函数,也是类的函数属性

    class AP:
        # 实例的绑定方法 类的函数属性
        def __init__(self, name, hp=690, atc=78):
            self.name = name  # 对象的属性
            self.hp = hp
            self.atc = atc
    
        def run(self):
            print(self, id(self))
            print("{} is running".format(self.name))
    
        @classmethod
        def class_method(cls):
            """
            类方法, cls 就是类 -》 调用此方法的类
            :return:
            """
            pass
    
        @staticmethod
        def statict_method():
            """
            本质上就是一个普通函数而已,只不过是在类里面定义了
            :return:
            """
            pass
    
    zj = AP("甄姬")
    xq = AP("小乔", hp=780)
    # print(id(zj))
    # zj.run()
    
    print(id(xq))
    xq.run()
    

    方法可以被这个类的每个实例对象调用,当一个实例对象调用此方法的时候, self 会被自动传值,传入的值就是目前调用此方法的 实例对象。
    类方法一般是用 类名.类方法 的方式调用,在被调用时, cls 也会被自动传值,被传入的值就是调用此方法的类; 当然类方法也可以被实例调用,此时 cls 仍然是此实例的类。
    静态方法就是在类里定义的普通函数而已,对于参数没有任何要求。可以被类和实例调用。
    相对于静态方法,类方法和实例的绑定方法,他们的 第一个参数都是必须要有的。

    八、魔方方法 __str__() 实现定义类的实例的表现形式

    当我们定义一个类的时候,默认打印出它实例时是不易读的,某些情况下我需要让这个类的实例的表现形式更易读。就可以使用__str__() 这个方法。

    使用前

    class Person:
        def __init__(self, name):
            self.name = name
    
    p = Person('shark')
    
    print(p)
    # <__main__.Person object at 0x10ac290f0>
    

    使用后

    class Person:
        def __init__(self, name):
            self.name = name
            
        def __str__(self):
            return "{}".format(self.name)
    p = Person('shark')
    
    print(p)
    # shark
    

    其实,__str__() 方法本身在我们定义类的时候就已经存在了,是 Python 内置的。我们在这里只是有把这个方法重写了。
    这个方法在使用的时候有返回值,且返回值必须是字符串类型

    相关文章

      网友评论

          本文标题:面向对象-极简版

          本文链接:https://www.haomeiwen.com/subject/olcryctx.html