一.类的定义
1.类的基本结构
#命名规则: 驼峰法class Student(): # 使用class 定义类a= 1 # 变量name = '小明'def aa(self): # 函数print(self.name)
函数中需要写self
函数中调用类中变量 使用 self.变量名
2.类的调用
要是使用类,需要实例化(使用类模版,实现具体实现的对象)
# 实例化 student类student = Student()# 调用类下面的方法student.aa()
类只负责定义, 而不负责执行(运行和调用这个类,要在类的外部)
二.方法和函数的区别
方法: 面向对象中的方法, 面向对象关注的是;函数:定义在模块中
变量,定义在模块中 称之为变量;定义在类中称之为 数据成员
没有必要特别强调区别
三.类与对象
类与对象的关键点在是否实例化
类是现实世界或思维世界中的实体在计算机中的反应
它将数据以及这些数据上的操作封装在一起
面向对象设计,从行为与特征设计类
类像是一个模版,通过类可以产生无数对象
对象代表一个具体的,是对类的实现
四.构造函数 __init__
class Student: name = ''age = 0def __init__(self):# 构造函数 inti...
构造函数是在类实例化的时候自动调用构造函数不能返回值, 只能返回None
作用:
让模版构造不同的函数,初始化对象的特征,属性
class Student:name = ''age = 0def __init__(self, name, age):# 构造函数self.name = nameself.age = 0print(11)student = Student('小花',11)print(student.name)
五.类变量和实例变量
类变量:类变量就是和类相关的变量,类和具体的对象无关实例变量:实例变量就是和对象相关联的
python 中,self后面跟的才是实例变量
写在类中的变量是类变量
class Student:name = '' # 类变量, 名字属性对学生类,实际上是没有太大的意义,应写在实例变量中sum # 一个班级里所有学生的总数, 这个就比较有意义def __init__(self, name, age):# 构造函数self.name = name # 实例变量self.age = 0print(11)
1.类与对象的变量查找顺序
对象变量-->类变量-->父类
self 代表 调用该方法的对象
2.在实例方法中访问实例变量与类变量
构造函数(自动执行),可以看成是一个特别的 实例方法.区别:1.调用方式不同:调用构造函数: 实例(对象)名 = 类名(参数1,参数2)例如: student1 = Student('石敢当' ,18)调用普通方法: 实例(对象)名.实例方法名例如: student1.dohomework()2.意义不一样(特征&行为):构造函数的作用:初始化类的各种特征实例方法的作用:描述类的行为3.访问方式:实例方法访问 实例的变量:①self.变量名实例方法访问 类的变量:① self.__class__.变量名② 类名.变量名
六. 类方法
1.定义类变量的时候,要加入cls,而且在类变量上方加入@classmethod,调用的时候同样是类.2.cls代表就是类,self 代表的实例对象, cls可以改成别的
尽量不要使用对象调用类方法,虽然可以调用
class Student:sum1 = 0@classmethoddef plus_sun(cls):"""类方法:return:""" cls.sum1 +=1print(cls)# 调用Student.plus_sun()
七. 静态方法
class Student:# 定义@staticmethod # 静态方法装饰器def add(x,y): # 静态方法可以没有self或者clsprint('这是一个静态方法')# 调用:student1 = Student()# 1.对象调用student1.add(1,2)# 2.类调用Student.add(1,2)
八.成员的可见性
1.内部调用与外部调用
内部调用指在类的内部访问调用
外部调用是指在类的外部访问调用
变量、方法等都有内部调用与外部调用
编码小建议: 不要在类的外面直接对类变量赋值, 应该通过在方法,方法中添加校验,保护数据的安全
自己编码的情况下,为了省事,可以这样直接赋值
2. 公开与私有,
public 公开的private 私有的
python默认类中的变量与方法是公开的,在之前加上__(双下划线)后认为是私有的
类的外部不能访问私有方法与变量
原理:
定义私有变量后, python会将私有变量名改成 _类名__私有名,所以在外部访问不到,
所以如果在外面 想要操作私有变量,可以用 _类名__私有名 的方式
由于python属于动态语言, 所以从外部给私有变量赋值,本质上是给对象添加了一个新的属性