- 类
- 类面向对象的作用:即取最终的结果,如有重复逻辑,类可让逻辑更方便,封装
函数只能放其中一个操作
类可以放一连串操作
函数打印
class 里面的函数内容相当于设计图纸,实例化后相当于设计图纸设计出来后的结果
初始化 def init(self,name):
析构,def del(self):
class People:
name = 'xiaoming' #类属性, 类里面的变量称为属性
_age = 18 #私有属性,别人知道后不会去动它,概念性问题
__age = 18 #也是私有属性,访问会报错
a = People() #实例化
print(a._age) #通过实例访问类属性,虽然是私有的,但是访问还是可以打印,
b = People()
18
class My_class:
i = '12334'
def f(self):
print('123')
return 'hello'
my = My_class() #实例化
print(my.i)
print(my.f())
my.f()
12334
123
hello
123
class Base:
name = 18 #类属性
def run(self,name): #方法,self实例本身
self.name = name #保存实例属性
print('%s在跑步%s'%self.name)
print('跑步')
#将类实例化
goudan = Base()
goudan.name = "狗蛋" #外面先实例属性值
print(goudan.name) #实例属性和类属性名一样,这里打印的是实例属性
#实例调用类属性,
goudan.run('狗蛋') #实例调用方法
狗蛋
- 类的方法
- 类的方法,类是函数的爸爸,函数是儿子
class User: #包含了对于用户所有的功能
def zhuce(self,name): #类里面的方法都会携带参数,传参数 name,
print('%s实现注册功能'%name)
def dxyzm(self):
print('实现短信验证码功能')
def denglu(self,name):
print('%s实现登录功能'%name)
goudan = User() #实例化
goudan.zhuce('goudan') #实例调用注册的方法, 实例.方法名()--方法调用方式
goudan.denglu('goudan')
print('------------------------------')
xiaohong = User()
xiaohong.denglu('xiaohong')
goudan实现注册功能
goudan实现登录功能
------------------------------
xiaohong实现登录功能
- 接收参数
更加方便的调用类里面的方法,每一个方法是调用一次
保存为实例属性
class User1:
def zhuce(self,name): #self代表实例本身
self.name = 'goudan' #定义实例属性, 实例.属性名=111
print('%s实现注册功能'%self.name) #不能只写name,无self下面的函数无法调用
def dxyzm(self):
print('%s实现短信验证码功能'%self.name)
def denglu(self):
print('%s实现登录功能'%self.name)
goudan = User1()
goudan.zhuce('goudan') #goudan=self. name = goudan , 给实例属性定义定义
goudan实现注册功能
class User2:
def zhuce(self): #self代表实例本身
print('%s实现注册功能'%self.name) #不能只写name,无self下面的函数无法调用, 会去类的外面找self.name的定义
def dxyzm(self):
print('%s实现短信验证码功能'%self.name)
def denglu(self):
print('%s实现登录功能'%self.name)
xiaohong = User2()
xiaohong.name ='xiaohong' #定义xiaohong的name的实例属性
xiaohong.zhuce()
xiaohong实现注册功能
- 初始化,析构
魔术方法
析构会在最后执行
析构方法
class User2:
def __init__(self,name): #初始化方法,在实例化的时候执行
self.name = 'guodan' #定义实例属性
def __del__(self): #不需要调用, 正常的情况下在程序执行完后再调用,析构
print('%s资料销毁'%self.name)
def zhuce(self):
print('%s实现注册功能'%self.name)
def dxyzm(self):
print('%s实现短信验证码功能'%self.name)
def denglu(self):
print('%s实现登录功能'%self.name)
goudan = User2('goudan') #实例化的时候有参数
goudan.denglu()
print('------------------------------')
del goudan #析构是在实例挂掉后再去执行
print('1234')
guodan实现登录功能
------------------------------
guodan资料销毁
1234
题目:定义一个矩形类,有长和宽2个实例属性,还有一个计算面积的方法:
class jx:
def __init__(self,length,width): #初始化参数后,下面的函数都可以直接调用此初始化的参数,
self.length = length
self.width = width
def square(self):
return '面积是:%s'%(self.length*self.width) #返回值需要赋予变量,需要打印出来,
ss = jx(4,5) #实例化的时候即需传入参数,直接定义实例化属性
S = ss.square()
print(S)
面积是:20
- 私有属性和保护属性
- 私有属性:’__'2个下划线,无法访问,需要更改访问名字
- 保护属性:‘_’ 一个下划线,可以访问
class People:
name = 'xiaoming' #类属性, 类里面的变量称为属性
_age = 18 #保护属性,别人知道后不会去动它,单下划线开头的属性和方法外界仍然是可以访问的,所以更多的时候它是一种暗示或隐喻
__age = 18 #私有属性,访问会报错,2个下划线,无法访问,
a = People() #实例化
# print(a.__age) # 私有的无法访问,
print(a._People__age) #需要更改下访问名字
print(a._age) #可以访问