python的类与对象

python的类与对象,第1张

概述python类的详解类与对象python类的创建与实例化过程实例化与初始化私有属性与私有方法类的描述__str__,帮助文档__doc__几个常用的装饰器对象的删除可迭代类对象的比较类与对象类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,

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的类与对象全部内容,希望文章能够帮你解决python的类与对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1186662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存