python之类
python之类
一、类的介绍
1、类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
2、实例化:创建一个类的实例,类的具体对象。 比如:zs ,18
3、实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
如:
self.name=name
self.age=age
4、类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。
如:
class Lei(object):
name=18
5、方法:类中定义的函数。
如:
def hs(self):
6、对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法
7、继承:将一个类的方法,可以被另一个类引用;
8、方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
二、类的定义
1、定义类:class
三种类定义格式
class 类名(object): #新式类 目前用的新式类
pass
class 类名(): ##经典类2
pass
class类名: #经典类1
pass
三、类的结构
格式:
class 类名(object):
类变量=值
def init(self,变量名1,变量名2): #init构造函数对类进行初始化操作
self.变量名1=变量名1 #实例变量1#self 开头就是类的实例
self.变量名2=变量名2 #实例变量2
def 方法1 (self):
打印内容1
def 方法2(self):
打印内容2
def 方法3(self):
打印内容3
if name == 'main':
类的对象名=类名(实例1,实例2)
类的对象.方法1
类的对象.方法2
类的对象.方法3
案例:
class Lei(object):
name=18
def init(self,name,age):
self.name=name
self.age=age
def hs(self):
print(self.name)
def hs2(self):
print(self.age)
def hs3(self):
print(self.name,"排名第一",self.age,"年龄")
if name == 'main':
dx=Lei("zs",18)
dx.hs()
dx.hs2()
dx.hs3()
四、类中的实例方法、动态方法、静态方法
(1)类的实例方法
案例:
class Lei(object):
name=18
def init(self,name,age):
self.name=name
self.age=age
def hs(self):
print(self.name)
def hs2(self):
print(self.age)
def hs3(self):
print(self.name,"排名第一",self.age,"年龄")
if name == 'main':
dx=Lei("zs",18)
dx.hs()
dx.hs2()
dx.hs3()
(2)类方法,也叫动态方法 @classmethod #定义类方法
cls 定义
class Lei(object):
name=18
age=20
def init(self,name,age):
self.name=name
self.age=age
def hs(self):
print(self.age)
@classmethod #定义类方法
def hs2(cls):#cls 方法名
print(cls.age) #打印也是cls开头
def hs3(self):
print(self.name,"排名第一",self.age,"年龄")
if name == 'main':
dx=Lei("zs",18)
dx.hs()
dx.hs2()
(3)静态方法 也叫私有方法 (@staticmethod)
class Lei(object):
name=18
age=20
def init(self,name,age):
self.name=name
self.age=age
def hs(self):
print(self.age)
@classmethod #定义类方法
def hs2(cls):#cls 方法名
print(cls.age) #打印也是cls开头
def hs3(self):
print(self.name,"排名第一",self.age,"年龄")
@staticmethod
def dy(name):
print(name)
if name == 'main':
dx=Lei("zs",18)
dx.hs()
dx.hs2()
dx.dy("ww")
五、python三大封装、继承、多态
(一)、封装:
1、封装:封装就是隐藏对象一些不希望外部所访问到的属性和方法,保证安全
2、概念:指的是在设计时,不对外提供,隐藏起来,提供公共方法以外对其方法就是把属性和方法封装到一个抽象的类中,
3、封装相当于一个黑盒子,我们将事务相关的属性和方法封装在一个类中,在调用类创建实例,不用关注内部代码的实现细节,我们只要调用结果就可以。
4、封装的优点:
(1)封装数据可以很好的保护隐私、
(2)封装方法主要原因是隔离复杂度
(3)封装提高了代码的复用性
(4)隐藏对象的属性和实现细节,提供公共方法对其访问
5、python中类的封装分为两种:
(1)公用(共用)
类中变量和方法公用,他们名称前没有下滑线,共有的变量和方法,在类的外部,内部以及子类都可以调用
(2)私用 (重点讲解)
在类中变量和方法中,___下滑线开头命名,则改变变量或方法为私用,私有的变量和方法,只能在内部使用,类的尾部以及子类都无法使用。
私有属性:格式 ___属性名 =值 在类的外部不能使用(对象不能调用属性)
私有化封装后的限制:
a、类可以访问
b、类外,对象外 不可访问
c子类和子类的对象 不可访问
案例1:数据封装:
class sjfz():
def init(self,name,age):
self .name=name
self.age=age
案例2:
class sjfz(object):
def init(self,name,age):
self .name=name #
self.age=age
def getname(self):#方法封装
print(self.name)
案例3:(封装私用方法)
class Lei(object):
name=18
age=20
def init(self,name,age):
self.name=name
self.age=age
def __hs(self): #私有方法
print(self.age)
def hs3(self):
self.__hs() # 私有方法在类的内部可以调用,外部不可调用
if name == 'main':
dx=Lei("zs",18)
dx.hs3()
案例4:封装私有的实例变量
class Lei(object):
age=20
def init(self,name,age):
self.__name=name
self.age=age
def __hs(self): #私有方法
print(self.__name)
def hs3(self):
self.__hs() # 私有方法在类的内部可以调用,外部不可调用
if name == 'main':
dx=Lei("zs",18)
print(dx.age)
案例5:私有变量可以修改
class Lei(object):
age=20
def init(self,name,age):
self.__name=name
self.age=age
def hs(self,newname): #私有方法
self.__name=newname
def hs3(self):
print(self.__name) # 私有方法在类的内部可以调用,外部不可调用
if name == 'main':
dx=Lei("zs",18)
dx.hs("ww")
dx.hs3()
(二)继承
1、单继承
class f():
def qian(self):
print("有一个亿")
def car(self):
print("车")
def fang(self):
print("房")
class s(f):
def wy(self):
print("无业")
def wck(self):
print("无存款")
if name == 'main':
dx=s()
dx.wck()
dx.wy()
dx.car()
dx.fang()
dx.qian()
dx1=f()
dx1.car()
dx1.fang()
dx1.qian()
2、多继承
class f():
def qian(self):
print("有一个亿")
def car(self):
print("车")
def fang(self):
print("房")
class m():
def gs(self):
print("公司")
def k(self):
print("矿")
def fj(self):
print(" 飞机")
class s(f,m):
def wy(self):
print("无业")
def wck(self):
print("无存款")
if name == 'main':
dx=s()
dx.wck()
dx.wy()
dx.car()
dx.fang()
dx.qian()
dx.fj()
dx.gs()
dx.k()
dx1=f()
dx1.car()
dx1.fang()
dx1.qian()
三、python多态
案例1:
def hs(a):
print(a)
hs(1)#1
hs("a") #a
print("中文") #中文
案例2:
class Animal(object):
def talk(self):
print('我是动物')
class Cat(Animal):
def talk(self):
print('喵喵')
class Dog(Animal):
def talk(self):
print('汪汪')
if name == 'main':
c = Cat()
c.talk()
d=Dog()
d.talk()
a=Animal()
a.talk()
案例:
class F(object):
def work(self):
print("工作")
class s1(F):
def work(self):
print("测试")
class s2(F):
def work(self):
print("开发")
class s3():
def work(self,F):
F.work()
if name == 'main':
dx=F()
dx1=s1()
dx2=s2()
dx3=s3()
dx3.work(dx)
浙公网安备 33010602011771号