类
- 类(class):用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法,对象是类的实例
- 类是一个独立存放变量(属性,方法)的空间,它定义了该集合中每个对象共有的属性和方法
- 类由类名,属性(变量),方法(函数)组成,类名约定俗成用大驼峰
- 对象:通过类定义的数据结构实例,对象包括两个数据成员(类变量和实例变量)和方法,对象是类的实例化
- 方法:类中定义的函数
- 变量在类中称为属性,但是类中的属性不仅仅只包含变量,函数等其他的对象也可以作为类的属性
- 类变量:类变量在整个实例化的对象中是共用的,类变量定义在类中且在函数体之外
- 函数是代码块的封装,类是函数的封装
- 类是一类事物的抽象,不是真是存在的。描绘了该类事物的共性
实例
- 实例是某类事物的具体个体,是该类事物的具体表现,它是真实存在的。
- 实例变量:定义在方法中的变量,只作用于当前实例的类
- 实例化:创建一个类的实例,类的具体对象,对象是类的实例化
- 实例也是一个独立存放变量的空间,每一个实例都是一个独立的变量空间,不同实例之间的空间互相不可见
私有属性
- 私有属性属于这个类,一般不要外面调用,保护起来
-Python中私有属性有两种,一个下划线_和两个下划线__
- 以一个下划线_开头,私有属性,可以在外面调用,约定俗成不在外面调用
- 以两个下划线__开头,强制私有属性,在外面调用不了
类创建
- 创建类:使用class语句来创建一个新类,class之后为类的名称并以冒号结尾:
- 定义在类里面,函数外面的变量是类全局
- 优先访问实例属性,再访问类属性
- 类属性:共性,实例属性:特性
案例1:
class Person: #定义类
var1 = "直接封装在类中的变量" #类属性
print(Person.var1)
Person.var2 = "后来封装在类中的变量" #在类外添加类属性
print(Person.var2)
p = Person() #实例化
print(p.var1) #类属性访问
print(p.var2)
案例2:
class Person:
pass
p1 = Person()
p2 = Person()
p1.var = "在实例中封装的变量" #对象添加的属性,它的空间是独立的
#实例属性,其他的访问不到
print(p1.var)
#实例化对象既能访问实例属性,也能访问类属性
#类只能访问类属性,实例属性访问不到
~~print(Person.var)~~ #类中找不到,不会去找实例中的
~~print(p2.var)~~ #p2没有,去找Person也没有
- 类里面凡是加了self的变量都称之为类属性,类里面的其他方法也可以访问
- 没加self的变量(并在函数里面)是普通变量,类里面其他函数访问不了
类的方法
- 实例本身就拥有的数据,要访问这些数据没必要从外面的函数去访问,可以直接在类的内部定义访问数据的函数,这样就把数据给封装起来了,这些封装数据的函数和类本身是关联起来的,我们称之为类的方法
- 通常,将默认会传入的那个参数命名为self,用来表示调用这个方法的实例对象本身。
- 要定义一个方法,除了第一个参数是self外,其他和普通函数一样,要调用一个方法,只需要在实例变量上直接调用,除了self不用传递,其他参数正常传入
- 封装的另一个好处是可以给类增加新的方法
class Person: #类方法,实例不可调用
def eat(self): #实例方法,类和实例都可调用
print("{} is eating".format(self.name))
p1 = Person()
p1.name = "xiaoming"
p2 = Person()
p2.name = "xiaohong"
p1.eat()
p2.eat() #xiaoming is eating
xiaohong is eating
class Employee:
empCount = 0
def __int__(self,name,salary):
self.name = name
self.salary = salary
empCount += 1
def displayCount(self): #此函数可省略
print("Total Employee %d"%Employee.empCount)
def displayEmployee(self):
print("Name:",self.name,",Salary:",self.salary)
emp1 = Employee(lilei,2999)
emp2 = Employee(hanmeimei,3000)
emp1.displayEmployee()
emp2.displayEmployee()
print("Total Employee %d"%Employee.empCount)
#Name: Zara ,Salary: 2000
Name: Manni ,Salary: 5000
Total Employee 2