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的类与对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享
- 2024-12-19Python资料:新手入门的全面指南
- 2024-12-19Python股票自动化交易实战入门教程
- 2024-12-19Python股票自动化交易入门教程
- 2024-12-18Python量化入门教程:轻松掌握量化交易基础知识