面向对象-极简版

一、什么是对象和类

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 内置的。我们在这里只是有把这个方法重写了。
这个方法在使用的时候有返回值,且返回值必须是字符串类型

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容