潍坊网站建设 58,义乌建设网站制作,深圳logo设计公司推荐,杭州网站设计公司价格问#xff1a;小编为什么突然开始发python#xff1f;难道C语言你不行了#xff1f; 废话少说#xff0c;让我们进入python中的类的学习#xff01;#xff01; #xff08;一#xff09;基本知识
#xff08;1#xff09;掌握类的概念
1、类的定义#xff1a; 即… 问小编为什么突然开始发python难道C语言你不行了 废话少说让我们进入python中的类的学习 一基本知识
1掌握类的概念
1、类的定义 即用来描述具有 相同属性和方法 的对象的集合 2、示例 就像int类其中有10020等不同的对象。和C语言中的结构体类似 2定义一个类 1、语法 class Student pass #pass语句的作用就是占位在还未确定好具体的内容的时候使用 2、 类 Student是对象吗 在python中只要是对象那么就有地址类型和值三个 所以我们可以验证 代码如下 class Student:pass
print(id(Student))
print(type(Student))
print(Student) 由代码的结果我们可以知道类也是对象 3类的组成
1、示例
class Student:my_home甘肃 #类属性def __init__(self,name,age):# __init__ 实例方法self.namenameself.ageagedef meat(self): #方法print(喜欢吃肉)classmethoddef cm(cls):#类方法print(类方法)staticmethoddef sm():#静态方法print(静态方法) 由代码所示类的组成一般就是这四个不需要全部都存在看具体情况自行添加 2、组成各部分的具体解释 1def __init__ (self,name,age): self.name name self.age age 在Python中def __init__(self): 是一个特殊的方法被称为构造函数或初始化方法。它是在创建一个类的实例时自动调用的用于初始化该实例的属性。 在 __init__(self) 方法的定义中形参self 必不可少而且必须位于其他形参的前面。Python调用这个方法来创建 Student 实例时将自动传入实参self。self参数代表当前实例对象。通过self可以访问实例的属性和方法。在__init__(self)方法中我们可以给实例对象设置初始值。可以通过self.属性名注意这个属性名可以是任何名称并且与之后的调用是相对应的但是selfnameage中的name和age尽量见名知意来指定实例对象的属性并为其赋予初始值。如何使用呢 即在类之外使用 具体如下 personStudent(张三,20)#创建一个实例对象 即就是给 name初始化为 ’张三‘ age初始化为20 。调用时如果想打印 person中的值可以写为如下代码 print(person.name,person.name) 2def meat ( self ) : print(喜欢吃肉) 在python中def meat(self): 是 自定义的方法参数为 self 。 在这个方法中可以调用实例方法中的实例 在自定义方法中调用实例方法中的属性 如person.meat() #注意这里一定是已经创建了一个person的实例对象代码请看之前 3 classmethod def cm(cls):#类方法 print(类方法) staticmethod def sm():#静态方法 print(静态方法) 这两种方法的调用类似都是直接使用 类名.方法名 来调用如下 Student.cm()
Student.sm() 4类属性 类中的方法外的变量被所有的对象共享 类属性的调用 上述的代码即可调用写为 print Student.my_home (二动态绑定属性和方法
1动态绑定属性 在python中类在定义好之后可能有时候会涉及到某一个实例对象的属性不想再另外一个实例对象中使用那么这个时候就需要动态绑定来解决 具体如下还是上述建立的 Student类 首先创建两个实例对象 然后存储在 stu1 和stu2 中 代码如下 stu1 Student(李四,20)
stu2 Student(王麻子,30)现在代码中是两个人的信息现在已知的是 李四是个男的需要打印出来但是王麻子性别不知道所以不打印那么应该怎么做 直接在 __init__(self) 方法中再加一个 性别属性但是仔细想想那样定义的属性是所有的实例对象共有的所以是不行的那就让我们使用动态绑定的方法来解决 如下 我们发现第三行代码就是给stu1动态绑定一个属性此时当stu2也试图使用的时候就会发生错误 2动态绑定方法 基本原理同上述动态绑定属性 1和绑定属性一样单独绑定一个方法需要在类之外 如下 如图片所示相当于定义了一个函数然后单独绑定给了stu1最后一行代码是调用。 三面向对象的三大特征
1封装
1、作用提高程序的安全性
2、具体就是将数据类型和行为方法包装到类对象中并且隐藏对象的属性和实现的细节只暴露调用方法 小技巧可以在类中某个属性名称前面加上__(两个下划线)从而不希望在外部被访问 我们发现这样对实例属性进行操作之后就无法以正常的方式在类外调用 但是任然可以通过 dir查出类中的所有属性然后看具体应该如何使用如下 我们发现stu1 所对应的 实例属性_Student__brand 和其他如name 不太相同这说明是有着特定的语法能够调用的 具体语法格式为 stu1._Student__brand 2继承 1、语法格式 class 子类名父类1父类2... 在python中支持多继承若没有填写父类则默认继承 object类定义子类的时候必须在其构造函数中调用父类的构造函数 2、示例 代码如下 class Person(object):#此处的子类为Person父类为 objectdef __init__(self,name,age):#在Person类中有实例方法self.name nameself.age agedef info(self): #在Person中定义一个方法 info作用是打印实例属性 name和ageprint(self.name,self.age)
class Student(Person):#此处的子类为Student 父类为 Persondef __init__(self,name,age,student_year):#此处为定义自己的实例方法多了一个实例属性为#student_yearsuper().__init__(name,age)#继承其父类的实例方法必须为super.父类方法名self.student_year student_year#属性重写def info(self):#定义自己的方法super().info()#继承父类的方法必须为super.父类方法名print(self.salary)#方法重写
class Teacher(Person):#原理同上def __init__(self,name,age,teacher_year):super().__init__(name,age)self.teacher_yearteacher_yeardef info(self):super().info()print(self.teacher_year)
stuStudent(zhangsan,20,5)#创建Student的类的实例对象存放在stu中其中包含在父类中继承的两个属性和自定义的一个属性
teaTeacher(lisi,35,10)#同上
stu.info()#调用方法
tea.info() 在本代码中有小编写的详细的注解接下来图解上述代码大家可以通过图片来理解 3方法重写 1、即子类继承的父类中的属性和方法对于子类来说是不足以支持子类的需求的此时就需要对其进行重写 2、示例 1属性重写上述 继承 中的代码片段有 对于这个父类只有两个实例属性最后创建好调用可以打印姓名和年龄但是很明显对于 Student 和Teacher两个子类是不足够的那么就可以写为如下 我们不难发现在两个子类中又加了属性分别为 student_year , teacher_year 方法重写也在上述代码中有体现你发现了吗 四object类/多态
1object 类
1、定义 所有类的父类所有类都有object类中的属性和方法 2、内置函数 dir 1作用在之前我们已经提及其作用就是可以查看所指定对象中的方法和属性 2用法printdir某个对象名称 3示例查看object类 4重写 __str__ 方法 在python中object类中的所有方法都是可以进行重写的从而改变其原来的作用原理来达到自己所需要的目的 对于 str 方法其默认是在使用print函数来打印类的对象的时候实现的其作用是返回地址 1、未改写之前代码还是上述 ‘继承’ 中的代码 2、改写 def __str__(self):return 名字{0}今年{1}岁当学生{2}年.format(self.name,self.age,self.student_year) 代码写在Student类中 改写之后再次打印