开个捕鱼网站怎么做,网络销售面试问题有哪些,威海市网站建设,重庆网站建设选夹夹虫1、类与对象的概念 类即类别、种类#xff0c;是面向对象设计最重要的概念#xff0c;从一小节我们得知对象是特征与技能的结合体#xff0c;而类则是一系列对象相似的特征与技能的结合体。 那么问题来了#xff0c;先有的一个个具体存在的对象#xff08;比如一个具体存在…1、类与对象的概念 类即类别、种类是面向对象设计最重要的概念从一小节我们得知对象是特征与技能的结合体而类则是一系列对象相似的特征与技能的结合体。 那么问题来了先有的一个个具体存在的对象比如一个具体存在的人还是先有的人类这个概念这个问题需要分两种情况去看 1在现实世界中肯定是先有对象再有类世界上肯定是先出现各种各样的实际存在的物体然后随着人类文明的发展人类站在不同的角度总结出了不同的种类比如 人类、动物类、植物类等概念。也就说对象是具体的存在而类仅仅只是一个概念并不真实存在比如你无法告诉我人类具体指的是哪一个人。 2在程序中务必保证先定义类后产生对象 这与函数的使用是类似的先定义函数后调用函数类也是一样的在程序中需要先定义类后调用类。不一样的是调用 函数会执行函数体代码返回的是函数体执行的结果而调用类会产生对象返回的是对象 1把一类事物的静态属性和动态可以执行的操作组合在一起所得到的这个概念就是类
2类的一个个体就是对象,对象是具体的,实实在在的事物
3对象是特征与技能的结合体其中特征和技能分别对应对象的数据属性和方法属性
4对象实例本身只有数据属性但是python的class机制会将类的函数绑定到对象上称为对象的方法或者叫绑定方法绑定方法唯一绑定一个对象同一个类的方法绑定到不同的对象上属于不同的方法内存地址都不会一样
在类内部定义的属性属于类本身的,由操作系统只分配一块内存空间,大家公用这一块内存空间
5创建一个类就会创建一个类的名称空间用来存储类中定义的所有名字这些名字称为类的属性而类中有两种属性数据属性和函数属性其中类的数据属性是共享给所有对象的而类的函数属性是绑定到所有对象的。
6创建一个对象实例就会创建一个对象实例的名称空间存放对象实例的名字称为对象实例的属性
7在obj.name会先从obj自己的名称空间里找name找不到则去类中找类也找不到就找父类…最后都找不到就抛出异常。
8类的相关方法类的相关方法(定义一个类,也会产生自己的名称空间)
类名.__name__ # 类的名字(字符串)
类名.__doc__ # 类的文档字符串
类名.__base__ # 类的第一个父类(在讲继承时会讲)
类名.__bases__ # 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__ # 类的字典属性、名称空间
类名.__module__ # 类定义所在的模块
类名.__class__ # 实例对应的类(仅新式类中)1.创建出类会产生名称空间,实例化对象也会产生名称空间。2.用户自己定义的一个类,实际上就是定义了一个类型,类型与类是统一的。3.用户先是从自己的命名空间找,如果找不大,在从类的命名空间找。student1.langage 1111print(student1.__dict__) 先是从自己的命名空间找print(Student.__dict__) 然后在从类的命名空间找4.通过类来访问,访问的是函数,通过对象来访问,访问的是方法,在类内部定义的方式实际上是绑定到对象的身上来用的。
function Student.fun at 0x000000000267DAE8
bound method Student.fun of __main__.Student object at 0x0000000002684128function Student.fun at 0x00000000025CDAE8
bound method Student.fun of __main__.Student object at 0x00000000025D4160
bound method Student.fun of __main__.Student object at 0x00000000025D41985.总结类的数据属性是大家共有的而且大家的内部地址是一样的,用的就是一个类的函数属性是绑定到大家身上的内部地址不一样绑定方法指的是绑定到对象身上。绑定方法绑定到谁的身上,就是给谁用的,谁来调用就会自动把自己当做第一个参数传入。**定义在类内部的变量,是所有对象共有的,id全一样,**定义在类内部的函数,是绑定到所有对象的,是给对象来用的,obj.fun()会把obj本身当做一个参数来传递。6.在类内部定义的函数虽然可以由类来调用,但是并不是为了给类用的,在类内部定义的函数的目的就是为了绑定到对象身上的。7.在类的内部来说,__init__是类的函数属性,但是对于对象来说,就是绑定方法。8.命名空间的问题:先从对象的命名空间找,随后在从类的命名空间找,随后在从父类的命名
空间找。
print(student1.x)9.在定义类的时候,可以想什么先写什么。 2、定义类 按照上述步骤我们来定义一个类 1在现实世界中先有对象再有类 对象1李坦克特征:学校oldboy姓名李坦克性别男年龄18技能学习吃饭睡觉对象2王大炮特征:学校oldboy姓名王大炮性别女年龄38技能学习吃饭睡觉对象3牛榴弹特征:学校oldboy姓名牛榴弹性别男年龄78技能学习吃饭睡觉 2在程序中必须先定义类后使用类用来产生对象 #在Python中程序中的类用class关键字定义而在程序中特征用变量标识技能用函数标识因而类中最常见的无非是变量和函数的定义
# 先定义类class OldboyStudent:schoololdboydef learn(self):print(is learning)def eat(self):print(is eating)def sleep(self):print(is sleeping)# 后产生对象stu1 OldboyStudent() stu2 OldboyStudent() stu3 OldboyStudent()print(stu1) print(stu2) print(stu3) 类中可以有任意python代码这些代码在类定义阶段便会执行因而会产生新的名称空间用来存放类的变量名与函数名可以通过OldboyStudent.__dict__查看类中定义的名字都是类的属性点是访问属性的语法。对于经典类来说我们可以通过该字典操作类名称空间的名字但新式类有限制新式类与经典类的区别我们将在后续章节介绍3、类的使用 3.1、引用类的属性 class OldboyStudent: schoololdboy def learn(self): print(is learning) def eat(self): print(is eating) def sleep(self): print(is sleeping)# 后产生对象stu1 OldboyStudent()stu2 OldboyStudent()stu3 OldboyStudent()print(stu1)print(stu2)print(stu3) print(OldboyStudent.school) #查 输出结果oldboyOldboyStudent.schoolOldboy2 #改 print(OldboyStudent.school)# 输出结果Oldboy2OldboyStudent.x1 #增print(OldboyStudent.x) #输出结果 1del OldboyStudent.x #删print(OldboyStudent.x)输出结果AttributeError: type object OldboyStudent has no attribute x 3.2、调用类或称为实例化得到程序中的对象 stu1 OldboyStudent() stu2 OldboyStudent() stu3 OldboyStudent() #如此s1、s2、s3都一样了而这三者除了相似的属性之外还各种不同的属性这就用到了__init__ __init__方法 # 用来为对象定制自己独特的属性
#注意该方法是在对象产生之后才会执行只用来为对象进行初始化操作可以有任意代码但一定不能有返回值 class OldboyStudent:......def __init__(self,name,age,sex):self.namenameself.sexsexself.ageage......s1OldboyStudent(李坦克,男,18) #先调用类产生空对象s1然后调用OldboyStudent.__init__(s1,李坦克,男,18)
s2OldboyStudent(王大炮,女,38)
s3OldboyStudent(牛榴弹,男,78) 4、对象的使用 class OldboyStudent:school oldboydef __init__(self,name,sex,age):self.namenameself.sexsexself.age agedef learn(self):print(is learning)def eat(self):print(is eating)def sleep(self):print(is sleeping)s1OldboyStudent(李坦克,男,18) #先调用类产生空对象s1然后调用OldboyStudent.__init__(s1,李坦克,男,18)
s2OldboyStudent(王大炮,女,38)
s3OldboyStudent(牛榴弹,男,78)
print(s1.__dict__)
print(s2.__dict__)
print(s3.__dict__)结果
{name: 李坦克, sex: 男, age: 18}
{name: 王大炮, sex: 女, age: 38}
{name: 牛榴弹, sex: 男, age: 78} #执行__init__,s1.name牛榴弹很明显也会产生对象的名称空间可以用s2.__dict__查看查看结果为
{name: 王大炮, age: 女, sex: 38}s2.name #查等同于s2.__dict__[name]
s2.name王三炮 #改等同于s2.__dict__[name]王三炮
s2.coursepython #增等同于s2.__dict__[course]python
del s2.course #删等同于s2.__dict__.pop(course) 5、补充说明 站的角度不同定义出的类是截然不同的 现实中的类并不完全等于程序中的类比如现实中的公司类在程序中有时需要拆分成部门类业务类等 有时为了编程需求程序中也可能会定义现实中不存在的类比如策略类现实中并不存在但是在程序中却是一个很常见的类。 转载于:https://www.cnblogs.com/foremostxl/p/9571782.html