热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python类的定义与操作

Python类的定义与操作上一篇文章:Python函数定义与使用下一篇文章:Python模块1、定义类、创建对象、__init__实例:c
Python类的定义与操作
上一篇文章:Python函数定义与使用
下一篇文章:Python模块

1、定义类、创建对象、__init__

实例:

class People():"""定义一个People类"""#__init__方法是类创建对象时默认运行的函数,用来进行初始化操作,不需要手动调用def __init__(self,name,age):"""初始化属性"""self.name=nameself.age=agedef run(self):print("%s,快跑,帅到被人砍"%self.name)#定义对象
mark=People("mark",18)
mark.run()#返回对象在内存中的地址
print(mark)

结果:

mark,快跑,帅到被人砍
<__main__.People object at 0x103b5c1d0>

2、__str__:定义类的描述

如果直接print(对象)&#xff0c;会直接返回该对象在内存中的地址&#xff0c;现在我们想要不直接返回这个地址呢&#xff1f;

实例&#xff1a;

class People():"""定义一个People类"""#__init__方法是类创建对象时默认运行的函数&#xff0c;用来进行初始化操作,不需要手动调用def __init__(self,name,age):"""初始化属性"""self.name&#61;nameself.age&#61;agedef run(self):print("%s,快跑&#xff0c;帅到被人砍"%self.name)def __str__(self):msg&#61;"我是一个类的介绍&#xff0c;我的作者是个大帅哥?️"return msg#定义对象
mark&#61;People("mark",18)
mark.run()#返回对象在内存中的地址
print(mark)

结果&#xff1a;

mark,快跑&#xff0c;帅到被人砍
我是一个类的介绍&#xff0c;我的作者是个大帅哥?️

3、私有属性、方法

只需要在属性变量名或方法名前加上__就表示是私有的了&#xff0c;简单吧?

实例

class People():"""定义一个People类"""#__init__方法是类创建对象时默认运行的函数&#xff0c;用来进行初始化操作,不需要手动调用def __init__(self,name,age):"""初始化属性"""#私有属性nameself.__name&#61;nameself.age&#61;agedef run(self):self.__test()def __test(self):print("%s,快跑&#xff0c;帅到被人砍" % self.__name)def __str__(self):msg&#61;"我是一个类的介绍&#xff0c;我的作者是个大帅哥?️"return msg#定义对象
mark&#61;People("mark",18)
mark.run()#返回对象在内存中的地址
print(mark)

结果&#xff1a;

mark,快跑&#xff0c;帅到被人砍
我是一个类的介绍&#xff0c;我的作者是个大帅哥?️

4、__del__():析构函数

对象被销毁时调用

实例&#xff1a;

class People():"""定义一个People类"""#__init__方法是类创建对象时默认运行的函数&#xff0c;用来进行初始化操作,不需要手动调用def __init__(self,name,age):"""初始化属性"""#私有属性nameself.__name&#61;nameself.age&#61;agedef run(self):self.__test()def __test(self):print("%s,快跑&#xff0c;帅到被人砍" % self.__name)def __str__(self):msg&#61;"我是一个类的介绍&#xff0c;我的作者是个大帅哥?️"return msgdef __del__(self):print("%s因为太帅了&#xff0c;要被干掉了"%self.__name)#定义对象
mark&#61;People("mark",18)
mark.run()#返回对象在内存中的地址
print(mark)#删除销毁对象
del mark

结果&#xff1a;

mark,快跑&#xff0c;帅到被人砍
我是一个类的介绍&#xff0c;我的作者是个大帅哥?️
mark因为太帅了&#xff0c;要被干掉了

5、继承

私有方法和属性不会被继承
  • 单继承

实例&#xff1a;

class Animal():def __init__(self,name,age):self.__name&#61;nameself.age&#61;ageclass Dog(Animal):def __init__(self,name,age):#调用父类方法super().__init__(name,age)def getAge(self):print("小狗年龄&#xff1a;",self.age)dog&#61;Dog(name&#61;"xDog",age&#61;5)
dog.getAge()

结果&#xff1a;

小狗年龄&#xff1a; 5

  • 多继承

实例&#xff1a;

#python默认所有类都继承object&#xff0c;可写可不写
class Base(object):def test(self):print("Base--test")class A(Base):def test(self):print("A--test")class B(Base):def test(self):print("B--test")class C(A,B):#pass表示暂时不写代码passc&#61;C()
c.test()

结果&#xff1a;

A--test

6、类属性、实例属性

实例&#xff1a;

#python默认所有类都继承object&#xff0c;可写可不写
class Base(object):#共有类属性name&#61;"mark"#私有类属性__age&#61;18#我的年龄是保密的哟passbase&#61;Base()
print(base.name)
print(Base.name)
#下面两句句运行错误,不能在类外访问私有属性
#print(base.__age)
#print(Base.__age)

结果&#xff1a;

mark
mark

7、类方法、静态方法

修饰器&#64;classmethod来标识类方法&#xff0c;第一个参数必须是类对象

修饰符&#64;staticmethod来标识静态方法

实例&#xff1a;

#python默认所有类都继承object&#xff0c;可写可不写
class Base(object):#共有类属性name&#61;"mark"#私有类属性__age&#61;18#我的年龄是保密的哟#类方法&#64;classmethoddef changeAge(cls):cls.__age&#43;&#61;1return cls.__age&#64;staticmethoddef staticFun():return "类静态方法被调用"base&#61;Base()
#实例调用类方法
print(base.changeAge())
#类调用类方法
print(Base.changeAge())#实例调用类静态方法
print(base.staticFun())
#类调用类静态方法
print(Base.staticFun())

结果&#xff1a;

19
20
类静态方法被调用
类静态方法被调用

8、__new__:创建实例时调用

第一个参数必须是类对象。

必须要有返回值&#xff0c;返回的是实例化后的对象&#xff0c;可以return 父类的__new__或者object的这个方法。

实例&#xff1a;

class Base(object):def __init__(self):print("__init__被调用了")def __new__(cls, *args, **kwargs):print("__new__被调用了")return super().__new__(cls)base&#61;Base()

结果&#xff1a;

__new__被调用了
__init__被调用了



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 代码如下:#coding:utf-8importosimportsysdefcut_and_paste_file(source,destination):”’sourc ... [详细]
  • 申明下哈本篇文章不是自己写的根据网上的文章再加上自己的加加点点反正大部分都是网站的智慧哈!!!1、线程基本概念1.1线程是什么࿱ ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 似乎有两种不同的方法可以将字符串转换为字节,如对typeerror的回答所示:str不支持缓冲区接口。这些方法中哪一种比较好或更适合用Python& ... [详细]
  • 丛api的python的简单介绍
    本文目录一览:1、如何使用python利用api获取天气预报 ... [详细]
author-avatar
阳光卐誓言
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有