python的类与对象

2021/5/7 20:28:19

本文主要是介绍python的类与对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

python类的详解

  • 类与对象
  • python类的创建与实例化过程
    • 实例化与初始化
    • 私有属性与私有方法
    • 类的描述__str__,帮助文档__doc__
    • 几个常用的装饰器
    • 对象的删除
    • 可迭代类
    • 对象的比较

类与对象

类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。
它们的关系是:对象是类的实例,类是对象的模板。对象是通过new classname产生的,用来调用类的方法;类的构造方法 。类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。(来自百度百科)

python类的创建与实例化过程

首先,前文说过类是对象的抽象,故在python中,类的使用顺序一般都是:创建一个类->实例化类->绑定类属性->其他操作(如调用类的方法)
创建类很简单,只需:

class Animal:
	pass

即可创建一个Animal类。然后通过调用__new__实例化类,在通过调用__init__,绑定类属性(可以认为是类属性 的初始化)。下面将给出一个Animal类,类中包含各种基础的方法。

class Animal(object):
	'Animal,的帮助文档,__doc__'
    # 实例化类时调用
    # 创建对象前调用
    # 必须要将cls返回回去,cls
    def __new__(cls, *args, **kwargs):
        print('创建对象,类名称:', cls.__name__)
        return object.__new__(cls)
    # 初始化方法
    # 创建完对象后会自动被调用
    def __init__(self, name):
        print(f'创建{name}对象')
        self.__name = name #在变量或函数前加__,就是私有变量。只能在类中使用。
        self.name = name
        self.__num = 0
    # def __slots__(self):
    #     # 限制实例动态属性,减少内存消耗
    #     # tuple类型
    #     pass

    def __hash__(self):
        print( f'{self.__name}使用了hash函数')
        return hash(self.__name)
    def __eq__(self, other):
        print(f'{self.__name}使用了__eq__函数')
        # self.__dict__['_Animal__name'] = self.__dict__['_Animal__name']+',手动修改'
        if isinstance(other, self.__class__):
            return self.__dict__ == other.__dict__
        else:
            return False
    def __str__(self):
        """返回一个对象的描述信息"""
        # print(num)
        return f"该对象名称是{self.__name},__str__"
    def __call__(self, name):
        return self.attr_animals(name)

    def __iter__(self):
        # 创建一个迭代器
        return self
    def __next__(self):
        # 有该方法,则该类为可迭代的类,即可以使用for...in...
        # 循环过程
        # 迭代时可以没有__iter__,但是必须有该方法。
        self.__num = self.__num + 1
        print(self.__num)
        return self.__num

    def attr_animals(self, name):
        print(f'{name}是狗狗的一种')
    # @staticmethod创建工具集,不需要实例化对象,第一个参数无需传对象本身
    @staticmethod
    def action_animals(name):
        print(f'{name}正在觅食')
    # @classmethod 第一个参数为类本身,通过新的方式构造实例,类似于重载
    @classmethod
    def method_animals(cls,name):
        print(f'{name}正在奔跑')
        # return cls(name)
    # 变方法为属性
    @property
    def obj_type(self):   
        return '动物'
    @property
    def obj_name(self):
        return self.name
    # 析构方法
    # 当对象被删除时,会自动被调用
    def __del__(self):
        # print("__del__方法被调用")
        print("%s对象马上被干掉了..." % self.__name)
    def __eat_foot(self):
        # 双下划线'__'开头,表示该方法是私有方法,只能在类内调用,其他地方均不可调用。
        print(f'{self.__name}正在进食,私有方法')
    def eat_foot(self):
        # 双下划线'__'开头,表示该方法是私有方法,只能在类内调用,其他地方均不可调用。
        print(f'{self.__name}正在进食,公有方法')

实例化与初始化

当实例化类时,首先执行__new__方法,将类实例化一个对象,然后通过__init__方法,绑定对象属性(也可以称之为初始化):

在这里插入图片描述
很明显,当执行Animal(‘藏獒’) 时,将Animal类实例化为了一个名字(__name)叫藏獒的对象。

私有属性与私有方法

其中在变量前加双下划线表示该属性(变量)为私有属性只可以在类内使用与修改,其他地方不可使用,否则该属性为共有属性,任何地方都可以使用与修改;私有方法同理:
在这里插入图片描述
在这里插入图片描述

类的描述__str__,帮助文档__doc__

当类中有__str__方法时,使用print函数打印该类实例化的对象,则会调用该方法。
在这里插入图片描述
否则print出的结果将是:<main.Animal object at …>。
使用__doc__将会输出类下面的字符串:
在这里插入图片描述

几个常用的装饰器

python中一@开头的一般称之为装饰器,用来装饰方法的,在类中常用的装饰器有:

  • @property,该装饰器可以将方法变为属性,一般用于创建只读属性
    在这里插入图片描述

  • @staticmethod创建工具集,不需要实例化对象,第一个参数无需传对象本身
    在这里插入图片描述

  • @classmethod 第一个参数为类本身,通过新的方式构造实例,类似于重载,它与staticmethod使用十分相似,但是他的实现与staticmethod不同,它的第一各个参数是类本身,如果将类return回去将会实例化对象。

  • 在这里插入图片描述

对象的删除

创建提个对象后,如果要删除该对象则会调用__del__方法。
在这里插入图片描述
在这里插入图片描述

可迭代类

可迭代即可以使用for…in…,当类中有__next__方法时,则可以使用之:
在这里插入图片描述

对象的比较

对象比较调用的是__eq__方法。
在这里插入图片描述



这篇关于python的类与对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程