-
2021-12-18 19:33:11
一、类和对象
类和对象是面向对象编程的两个核心概念
1、类
类是对一群具有相同特征或行为的事物的一个统称,是抽象的,不能直接使用。就像一个模板,是负责创建对象的。
特征 被称为 属性
行为 被称为 方法
2、对象
对象是由类创建出来的一个具体存在,可以直接使用
由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法
<先有类,再有对象>
3、类和对象的关系
类是模板,对象是根据类这个模板创建出来的。
类只有一个,而对象可以有很多个
不同的对象之间的属性可能会各不相同
类中定义了说明属性和方法,对象中就有什么属性和方法
<类名通常采用大驼峰命名法:如CapWords>
二、dir内置函数
使用内置函数dir( )传入标识符/数据,可以查看对象内的所有属性及方法
__方法名__ 是Python提供的内置方法/属性,常用的如下:
三、定义类
1、定义简单类
语法格式:
class 类名: def 方法1(self,参数列表): pass def方法2(self,参数列表): pass 对象变量 = 类名()
在类的封装内部,self 标识当前调用方法的对象自己
在方法内:
可以通过self,访问对象的属性,或调用其他的对象方法
2、初始化方法
当使用类名()创建对象时,会 自动 执行以下操作:
1、为对象在内存中分配空间 —— 创建对象
2、为对象的属性设置初始值—— 初始化方法 (init)
这个初始化方法就是 __init__,是对象的内置方法,专门用来定义一个类具有哪些属性的方法
使用类名()创建对象时,会自动调用初始化方法
在初始化方法中设置初始值:
1、把希望设置的属性值,定义成__init__方法的参数
2、在方法内使用如下代码接收外部传递的参数
self.属性 = 形参
3、在创建对象时,使用 类名(属性1、属性2) 调用
四、内置方法和属性
1、__del__方法
当使用类名()创建对象,为对象 分配完空间后 ,自动调用 __init__ 方法
当一个对象被从内存中销毁前,会 自动调用 __del__方法
应用场景:
__init__ 改造初始化方法,可以让创建对象更灵活
__del__ 如果希望对象在被销毁前再做一些事情,可以使用__del__方法
生命周期:
一个对象从调用类名()创建,生命周期开始
一个对象的__del__方法一旦被调用,生命周期结束
在对象的生命周期内,可以访问对象属性或调用方法
<del 关键字可以删除一个对象,或在整个结束后被自动删除>
2、__str__方法
在Python中,使用print输出对象变量,默认情况下会输出这个变量 引用的对象 是由哪一个类创建的对象,以及在内存中的地址(十六进制)
如果在开发中,希望使用print输出对象变量,能够打印自定义的内容,就可以利用__str__方法
<__str__方法必须返回一个字符串>
更多相关内容 -
Python 类与对象
2019-04-10 16:49:40类与对象的理解与封装特性 面向对象编程语言 - 类: 一个模板, (人类)---是一个抽象的, 没有实体的 - 对象: (eg: 张三, 李四) - 属性: (表示这类东西的特征, 眼睛, 嘴巴, 鼻子) - 方法: (表示这类物体可以...类与对象的理解与封装特性
面向对象编程语言 - 类: 一个模板, (人类)---是一个抽象的, 没有实体的 - 对象: (eg: 张三, 李四) - 属性: (表示这类东西的特征, 眼睛, 嘴巴, 鼻子) - 方法: (表示这类物体可以做的事情, eg: 吃饭, 睡觉,学习)
1). 定义类:class: 类
from collections import Counter
例子: str, list, dict, Counter
object代表是, 人类继承于哪一个类, 如果不知道继承哪个类, 就写object;
class 人类(object): # print('hello') # 构造方法(魔术方法), 当创建对象的时候, 自动执行的函数 def __init__(self, name, age, gender): # python解释器自动将对象传给self这个形参. # 看self到底是什么东西? # 将对象与该对象的属性绑定在一起. # 调用对象的属性两种方式: # - 张三.name # - self.name self.name = name # 属性 self.age = age # 属性 self.gender = gender # 属性 print(self) # 实质上是一个对象, <__main__.人类 object at 0x7f4fdc4864a8> # 方法(在类里面定义的函数, 叫做方法) def eat(self): print("%s 正在吃饭..." %(self.name))
创建对象====根据模板(类)创建对象(真实存在)
张三 = 人类("张三", 10, 'male') print("张三:", 张三)
看对象的属性
print(张三.name) print(张三.age) print(张三.gender)
让对象执行方法
张三.eat()
对象与类掌握练习
应用练习1 创建一个类People,拥有的方法为砍柴,娶媳妇,回家;实例化对象,执行相应的方法 显示如下: 老李,18岁,男,开车去娶媳妇 校思浩,22岁,男,上山去砍柴 唐浩,10岁,女,辍学回家 提示: 属性:name,age,gender 方法:goHome(), kanChai(),quXiFu()
class People(object): def __init__(self,name,age,gender): self.name = name self.age = age self.gender = gender def huiJia(self): print("%s,%d,%s,辍学回家" %(self.name,self.age,self.gender)) def quXiFu(self): print("%s,%d,%s,开车去娶媳妇" %(self.name,self.age,self.gender)) def kanChai(self): print("%s,%d,%s,上山砍柴" %(self.name,self.age,self.gender)) Laoli = People('老李',18,'男') zhangsan = People('校思浩',22,'男') lisi = People('唐浩',10, '女') Laoli.quXiFu() zhangsan.kanChai() lisi.huiJia()
类的私有属性与私有方法
类的私有属性: __private_attrs:两个下划线开头,声明该属性为私有, 不能在类地外部被使用或直接访问。 在类内部的方法中使用时 self.__private_attrs。 类的方法: 在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同, 类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。 self 的名字并不是规定死的(因为是形参),也可以使用 this,但是最好还是按照约定是用 self。 类的私有方法 __private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 , 不能在类地外部调用。self.__private_methods。
class People(object): def __init__(self,name,age,gender, money): self.name = name self.age = age self.gender = gender self.__money = money def __play(self): print("王者荣耀正在进行时") p1 = People('user1', 10, 'male', 1000000) print(p1.gender) p1.__play
栈数据结构的封装
应用练习2:栈的数据结构 class Stack: 栈的方法: 入栈(push), 出栈(pop), 栈顶元素(top), 栈的长度(lenght), 判断栈是否为空(isempty) 显示栈元素(view) 操作结果: 栈类的实例化 入栈2次 出栈1次 显示最终栈元素
class Stack(object): # 构造函数 def __init__(self): self.stack = [] def push(self, value): """ :param value: 入栈元素 :return: """ self.stack.append(value) return True def pop(self): # 判断栈是否为空 if self.stack: # 获取出栈元素, 并返回 item = self.stack.pop() return item else: return False def top(self): if self.stack: return self.stack[-1] else: return False def length(self): return len(self.stack) def isempty(self): return self.stack==[] def view(self): return ",".join(self.stack) s = Stack() s.push('1') s.push('2') s.push('3') s.push('4') print(s.top()) print(s.length()) print(s.isempty()) s.pop() print(s.view())
队列数据结构的封装
class Queue(object): # 构造函数 def __init__(self): self.queue = [] def push(self, value): self.queue.append(value) return True def pop(self): if self.queue: del self.queue[-1] else: return False def front(self): if self.queue: return self.queue[0] else: return False def rear(self): if self.queue: return self.queue[-1] else: return False def length(self): return len(self.queue) def isempty(self): return self.queue==[] def view(self): return ",".join(self.queue) s = Queue() s.push('1') s.push('2') s.push('3') s.push('4') print(s.front()) print(s.rear()) print(s.length()) print(s.isempty()) s.pop() print(s.view())
第二个特性之继承
概念:
- 父类与子类/基类和派生类
from io import TextIOWrapper
class Animals(object): def __init__(self, name, age): self.name = name self.age= age def eat(self): print('eating......') class Dog(Animals): # 当Dog没有构造方法时,执行Animals里面的构造方法 def __init__(self, name, age, power): # self.name = name # self.age = age # 执行Dog的父类的构造方法; super(Dog, self).__init__(name, age) self.power = power def eat(self): print(self.power) super(Dog, self).eat() # 1. 如果子类没有的属性和方法, 则去父类找, 如果父类也没有, 就报错。 d1 = Dog("大黄",3,100) print(d1.name) print(d1.age) print(d1.power) d1.eat()
多继承原理
#coding:utf-8 # # 经典类 # class Person1: # pass # p1 = Person1() # print(p1) # # # 新式类 # class Person2(object): # pass # p2 = Person2() # print(p2)
# 在python2中既有新式类也有经典类; # # # 经典类的继承算法: 深度优先算法 # 新式类的继承算法: 广度优先算法 # python3全部都是新式类; class D: def test(self): print("D test") class C(D): pass def test(self): print("C test") class B(D): pass # def test(self): # print("B test") class A(B,C): pass # def test(self): # print("A test") a = A() a.test()
三,多态性
#子类和父类存在相同方法时,子类会覆盖父类方法 #运形时总会调用子类方法--> 多态 class Animal(object): def run(self): print('running...') def cry(self): print('crying...') class Dog(Animal): def run(self): print('dog running...') def eat(self): print('dog eating...') class Cat(Animal): def run(self): print('cat running...') cat = Cat() cat.run() dog = Dog() dog.run()
图书管理系统
# 假设每本书只有一本 class Book(object): def __init__(self, name, author, state, bookIndex): self.name = name self.author = author # 0:'已借出' 1:'未借出' self.state = state self.bookIndex = bookIndex def __str__(self): return 'Book(%s, %d)' %(self.name, self.state) class BookManage(object): # 存放所有书籍信息, 列表里面存放的是Book对象 books = [] def start(self): """图书管理系统初始化数据""" self.books.append(Book('python', 'Guido', 1, 'IN23445')) self.books.append(Book('java', 'Guido1', 1, 'IN23445')) self.books.append(Book('C++', 'Guido2', 1, 'IN23445')) print("初始化数据成功!") def Menu(self): """图书管理菜单栏""" while True: print(""" 图书管理操作 1). 添加书籍 2). 删除数据 3). 查询书籍 4). 退出 """) choice = input("请输入你的选择:") if choice == '1': self.addBook() elif choice == '2': self.delBook() elif choice == '3': self.borrowBook() elif choice == '4': exit() else: print("请输入正确的选择!") def addBook(self): print("添加书籍".center(0, '*')) name = input("书籍名称:") bObj = self.isBookExist(name) if bObj: print("书籍%s已经存在" %(bObj.name)) else: self.books.append(Book(name,input("作者:"), 1, input("存放位置:"))) print("书籍%s添加成功" %(name)) def delBook(self): print("删除书籍".center(50,'*')) for i in self.books: print(i) name = input("删除书籍名称:") a = self.isBookExist(name) if a: self.books.remove(a) print("删除%s成功" %(a)) else: print("书籍不存在") def borrowBook(self): print("查询书籍".center(50,'*')) for i in self.books: print(i) name = input("查询书籍名称:") b = self.isBookExist(name) for book in self.books: if book == b: print(book) break else: print("%s不存在" %(b)) break def isBookExist(self, name): """检测书籍是否存在""" # 1. 依次遍历列表books里面的每个元素 # 2. 如果有一个对象的书名和name相等, 那么存在; # 3. 如果遍历所有内容, 都没有发现书名与name相同, 书籍不存在; for book in self.books: if book.name == name: # 因为后面需要 return book else: return False if __name__ == "__main__": bManger = BookManage() bManger.start() bManger.Menu()
-
python 类与对象练习题
2018-11-18 18:46:541、创建Person类,属性有姓名、年龄、性别,创建方法personInfo,打印这个人的信息 2、创建Student类,继承Person类...创建方法study参数为Teacher对象,调用Teacher类的teachObj方法,接收老师教授的知识点,然后打...1、创建Person类,属性有姓名、年龄、性别,创建方法personInfo,打印这个人的信息
2、创建Student类,继承Person类,属性有学院college
,班级class,重写父类personInfo方法,调用父类方法打印个人信息外,将学生的学院、班级信息也打印出来,
创建方法study参数为Teacher对象,调用Teacher类的teachObj方法,接收老师教授的知识点,然后打印‘老师xxx,我终于学会了!’xxx为老师的teach方法返回的信息。
重写__str__方法,返回student的信息。
3、创建Teacher类,继承Person类,属性有学院college,专业professional
,重写父类personInfo方法,调用父类方法打印个人信息外,将老师的学院、专业信息也打印出来。
创建teachObj方法,返回信息为‘今天讲了如何用面向对象设计程序’
4、创建三个学生对象,分别打印其详细信息
5、创建一个老师对象,打印其详细信息
6、学生对象调用learn方法
7、将三个学员添加至列表中,通过循环将列表中的对象打印出来,print(Student对象)。
-
Python中的类与对象
2021-07-30 09:59:24一、概念理解 类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 实例化:创建一个类的实例,类的具体对象。 对象:通过类定义的数据结构实例。...一、概念理解 类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 实例化:创建一个类的实例,类的具体对象。 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。 方法:类中定义的函数。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样 一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a) "关系(例图,Dog是一个Animal)。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 二、定义和使用类
class Baoan13(object): #新式类 定义一个类,并且继承object类,父类、基类、超类 class Baoan13: #经典类,参数列表中没有object head='我是一个类变量' #类变量,可以被类中所有的实例方法调用,不作为实例变量使用 def __init__(self,name,age,hight): #构造方法,又称构造函数。作用:初始化类的属性 #定义:在类里面,双下滑线构成私有方法,只能被自身或子类访问 self.name=name #实例变量(用self修饰的一个变量) self.age=age self.hight=hight def play(self): #实例方法(实例函数) print(self.name+'今
年'+self.age+'岁了,他的身高是'+self.hight+'cm。') def get_play(self): #这个实例方法是调用上面play的实例方法 self.play
点击添加图片描述(最多60个字) 编辑 @classmethod #@classmethod是一个类方法的装饰器 #在类中,@开头的称为装饰器 #装饰器的作用:本身也是一个函数,在不影响原有功能的基础上,添加新的功能 def func1(cls): #类方法,以cls修饰的一个方法,类方法的特性:单例模式 print('我是一个类方法。') def func2(cls): #这也是一个类方法,与上面有@classmethod修饰的不一样 cls.value=20 #类方法变量 print(cls.value) @staticmethod #静态方法的装饰器 # 静态方法:写在类中的普通方法,能被实例方法和类方法调用,但是不能调用实例方法和类方法 def func: print('我是一个任人调用的静态方法。') def putong: print('我只是一个普通函数。')
if __name__=='__main__': #主函数调用 #1调用.类直接调用实例方法(实例函数) Baoan13('小明','18','180').play #2.调用.根据类创建一个对象p,创建对象的过程被称为实例化 # #对象p可以调用类中所有的实例方法(实例函数)和实例变量 p=Baoan13('小明','18','180') #常用。创建对象,传入参数(参数数量要与构造的方法一致) p.play #对象调用实例方法 # p.get_play #对象调用实例方法(实例方法get_play去调用实例方法play) # print(p.name) #对象调用实例变量 # print(p.age) #对象调用实例变量 # print(p.hight) #对象调用实例变量 # print(p.head) #对象调用类变量 # p.func1 #对象调用类方法( @classmethod修饰的) # p.func2 #对象调用类方法 # p.func #对象调用类方法(@staticmethod修饰的) # putong #普通函数的调用 如需了解更多测试技术信息请关注: 深圳市多测师信息技术有限公司
-
python 类的定义_类和对象的关系
2021-02-10 22:19:101.类和对象我们把对象比作一个“饼干”,类就是制作这个饼干的“模具”。我们通过类定义不同数据类型的属性(数据)和方法(行为),也就是说,“类将行为和状态(数据)打包在一起”。对象是类的具体实例,一般称为“类的... -
python类对象和实例对象有什么区别吗
2021-04-27 01:34:53python类对象和实例对象有什么区别吗发布时间:2020-07-20 14:10:37来源:亿速云阅读:119作者:清晨这篇文章主要介绍python类对象和实例对象有什么区别吗,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴... -
Python中的类和对象是什么
2021-01-29 04:51:23面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程。二、类和对象1、类的概念面向对象编程的2个非常重要的概念:类和对象是面向对象编程的核心。在使用对象的过程中... -
Python学习笔记(13)-Python类与对象示例
2017-05-03 15:30:40一,简介Python支持面向对象编程,所以很容易使用Python时可以使用面向对象的观点来组织代码,实现业务逻辑处理。 Python是一种动态语言,所以它的面向对象机制的定义和使用都挺有意思,所以本篇主要内容: Python类... -
简单理解Python中的类对象、实例对象、属性、方法
2017-08-22 22:57:30# 类对象 # 公有类属性 # 私有类属性 # 魔法方法 # 公有实例属性 # 私有实例属性 # 私有方法 # 公有方法 -
python中的类和对象,属性和方法
2018-04-26 13:18:30一、面向对象的概述面向对象是一种描述业务问题、设计业务实体和实体之间关系的方法二、类和对象1、类和对象得区别:类是对客观世界中事物得抽象,而对象是类实例化后的实体 例如:汽车模型就是一个类,制造出来的... -
浅谈Python中类文件对象的使用
2020-10-12 11:17:03所谓类文件对象(file-like object),简单说就是类似文件对象的对象,至少要具备read()和write()两个方法。由于磁盘文件的写入和读出速度远远小于内存的读写速度,当我们使用文件作为两个连续的处理过程的数据交换... -
python 类对象的销毁
2020-04-18 12:04:24python和Java一样都是垃圾自动回收,不需要我们显示地销毁对象。执行del obj时会调用对象的__del__方法,这样对象的引用计数会减1,当对象的引用计数为0时,对象就会被销毁,内存就会被回收。 继承object的del方法,... -
在Python 中如何将类对象序列化为JSON?
2022-03-07 21:53:35本文重点介绍了在Python中,如何来将自定义对象序列化为JSON以JOSN格式进行输出,由浅入深给出了不同的解决方案,并给出了相应的源代码。 -
Python定义类、创建类的对象(类的实例化)
2021-10-25 20:37:50在python中,可以通过class关键字定义类,然后通过定义的类来创建实例对象。语法格式如下: calss 类名: 类体 注意事项 在python中使用class关键字来定义类,定义类时需要注意以下几个事项: (1)类代码块以... -
Python中的类的定义和对象的创建
2018-08-16 17:35:59面向对象中两个重要的概念: ...一个类可以创建无穷多个对象,每个对象都属于类。 1.创建类和创建类对象 1.创建类,类主要由类名,属性,方法组成,当然创建一个类时,属性和方法可以选择的。 cla... -
python中的对象
2021-01-14 03:39:29一、python对象python使用对象模型来存储数据。构造任何类型的值都是一个对象。所有python对象都拥有三个特性:身份、类型、值身份:每个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数 id() 来... -
【仿真日志 2 】如何将Python的类对象作为另一个函数的参数
2020-01-04 21:14:11如何将一个类对象作为一个函数的参数呢? 按照以下格式即可: def 函数名(类名) 对,只需要将类名作为形参即可,实测有效。 这一点和C++其实有点像。 我这里是将另外一个文件编写的类作为本文件的类中函数的参数 ... -
python面向对象
2022-04-15 21:18:35一、面向过程和面向对象 1.面向过程:是一种以事件为中心的编程思想,更关注过程。简单的问题可以用面向过程的思路来...2.面向对象:世界上的每个人或事务都能看成一个对象,每个对象都有自己的属性和行为,对象与对 -
python创建对象
2022-03-19 22:07:42魔法方法 class Lauf(object): #创建对象 def __new__(cls): return super().__new__(cls) #初始化对象 def __init__(self, title): ... #私有方法、私有属性,只能在类内部使用,类对象&实例对象都 -
python下,类对象和实例对象区别,类变量和实例变量区别
2018-10-13 15:06:52Y14 一、类对象和实例对象 简短理论: 类对象是将具有相似属性和方法的对象总结抽象为类对象,可以定义相似的一些属性和方法,不同的实例对象...首先,要明白,在python中,“万物皆对象”。个人理解: 类对象... -
Python类和对象的理解
2018-12-12 19:48:43Python类 类 是对一群具有相同特征 或者行为的事物的一个统称。是抽象的,不能直接使用。 因此类的主要作用是表示某些特征和行为,在Python中 特征被称为属性 行为被称为方法 理解类和对象的关系 类好比制造飞机的... -
python批量创建对象
2019-06-18 17:52:511、函数内(locals): class A(): def __init__(self): self.val = 10 for i in range(10): locals()[f'x{i}'] = A() ...2、类内: class A(): def __init__(self): self.val = 10 class B(): ... -
python:类的定义、实例化对象
2021-02-03 12:24:54(点)运算符来调用类中封装好的对象属性:变量在类中称为属性,但是类中的属性不仅仅只包含变量,函数等其他的对象也可以作为类的属性私有属性:在python中有两私有属性,分别是在属性前加 一个下换线( _ ) 和 两个... -
Python面向对象写Student类
2019-04-25 21:29:49直接看代码写法: class Student: "这是Student类的说明" #__doc__ objCount = 0 #类的静态变量 def __init__(self, name, age): #构造函数,创建类的实例调用 ... self.name = name #self代表对象 ... -
关于python类说法错误的是( )
2021-02-03 14:47:07关于python类说法错误的是( )答:类的实例方法必须创建对象前才可以调用声表面波滤波器稳定性差,需要调整。( )答:√扁平骨盆是指( )答:骨盆入口前后径小于正常下列哪些因素可影响胚泡植入( )答:置入避孕环 子宫... -
python创建类和类方法
2021-12-20 19:56:26创建一个类的三种方法: class Annimao(): pass class Annimao(object): pass class Annimao: pass 三种类方法: 1、实例方法 class Person: def __init__(self,age,name): self.age = age self.name = ... -
python是面向对象语言吗
2021-04-27 07:45:17Python究竟是不是面向对象的编程语言面向过程和面对对象是一种编程思想,不能说某某语言是不是面对对象或是面向过程,而是某某语言是否支持面对对象或面向过程。回归主题,python可以支持面对对象,但也可以支持面向... -
混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解
2020-07-21 17:05:13Python中类、对象、方法、函数和属性的区别和理解前言一、类、对象、方法、函数和属性的区别和理解二、一个类的简单案例和对各种概念的理解 欢迎学习交流: zengf.hou@bit.edu.cn 前言 相信很多刚刚初学 python 的... -
【笔记14】python动态创建对象(类实例)、动态赋值、动态生成变量
2019-07-11 22:33:24这里写自定义目录标题本次链接全集初衷实现基础动手补充:生成对象的...Python动态变量名定义与调用2 Python3 exec 函数3 Python format 格式化函数4 Python进阶-自定义类基础5 python 深入理解 赋值、引用、拷贝、... -
python 类对象转json字符串
2019-07-31 14:31:05使用实例的 __dict__属性,将类对象转为json格式字符串 import json class Person(object): def __init__(self): self.name = 'John' self.age = 25 self.id = 1 person = Person() s = json.dumps(pe...