找回密码
 立即注册
杭州6期1—何茹 +好友
这个人很懒什么都没写
听众
2
主题
19
金钱
236
个人名片
粉丝关注
还没有人关注TA
添加表情

python中的类

已有 177 次阅读2021-5-5 20:00

一、面向对象的基本概念

类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例

实例化:创建一个类的实例,类的具体对象。

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

方法:类中定义的函数

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外,类变量通常不作为实例变量使用。


实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用self 修饰的变量。


 继承:即一个派生类(derived class)继承基类(base class)的字段和方
法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样
一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)
"关系(例图,Dog是一个Animal)


方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。


拓展知识:新式类和经典类类
class Person(object):pass #新式类三种写法并无区别
class Person():pass
class Person:pass      
                       
新式类的MRO 方法解析顺序,采用的是从左到右,广度优先的方式进行查找
查找顺序为D->B->C->A
class A(object):
def name(self):
return "A"
class B(A):
pass
class C(A):
def name(self):
return "C"
class D(B, C):
pass
if __name__ == '__main__':
print(D().name())


经典类的MRO,方法和属性的查找链是按照从左到右,深度优先的方式进行查找
查找顺序为D->B->A->C

二、定义和使用类
在Python中,可以使用class关键字来声明一个类,基本语法如下:
class People(object): #新式类

def __init__(self,name): #构造函数又称为构造方法
self.name = name

创建一个对象p
p = People('xiaowang')

class hz1(object):
x=10 #类变量
y=20
def __init__(self,x,y): #构造函数,初始化
self.x=x #实例变量
self.y=y #实例变量
def dcs001(self):
print(self.x)
print(self.y)
def dcs002(self):
print(self.x+self.y)
@classmethod #动态方法 ,也叫类方法
def dcs003(cls):
print(cls.x)
print(cls.y)
@staticmethod # 静态方法 #也叫私有方法
def dcs004(x):
print(x)

if __name__ == '__main__':
d=hz1(1,2) # 创建一个对象
# d.dcs001() #通过对象调用函数
# d.dcs002( ) #通过对象调用函数
# print(hz1.n) #通过类名调用类变量
# hz1.n=20 ##通过类名修改类变量
# print(hz1.n) #调用修改的类变量
hz1.dcs004(8) #调用静态方法

三、根据类创建对象  

对象是类的实例,我们把人类理解成一个类的话,那么在人类中的具体的一个人就成
了这个类的一个对象,所以说只要在类中定义了对象才能使用类。创建对象方法如下:
对象名=类名() 

class People: #经典类
def __init__(self,name): #构造函数又称为构造方法
self.name = name #实例变量
p = People('xiaowang') #创建一个对象p

名词解释:
1、定义类的时候__init__是一个构造函数,该函数是两个下划线开头和两个下
划线结束,其作用就是当创建类的对象和实例时系统会自动调用构造函数,通
过构造函数对类进行初始化操作

 
2、定义类的时候__init__方法中有一个参数self,这也是类中的方法与普通函
数的区别,类的中的方法必须有一个参数self,而且位于参数列表的开头,在
类中self就是代表类的当前类的实例(对象)自身,在python调用时无需传值,
python会将对象自动传给self接受


四、类中的类变量、实例变量

class P(object):
def __init__(self,name):
self.__name=name
def setname(self,newname):
self.__name=newname
def getname(self):
return self.__name
if __name__ == '__main__':
a=P("fz")
a.setname("zf")
print(a.getname())
print(a.__name)
公用(共有):类中的变量和方法公用;他们名称前都没有下划线,公有的变量和方法,在类的外部,内部,以及子类都可以使用
私有:在类中的变量或方法下,下划线__开头命名,则改变变量或方法为私用,私有的变量和方法,只能在本类内部使用,类的外部以及子类都无法使用。

私有属性
格式:__属性名=值    在类的外部不能使用(对象不能调用属性)
私用化封装后的限制:
(1)类可以访问
(2)类外/对象外  不可访问
(3)子类和子类对象  不可访问
1、类变量:通常在类名的下方,在方法的上方就是一个类变量可以理解为:以某种方式在某地方被赋值,即存在,可被读写
2、实例变量:通常在实例方法下方,self.变量名=变量名可以理解为:在被赋值后即变量存在,可读可写
class S():
def a(self):
print("aaaa")
def b(self):
print("bbbb")
def c(self):
print("cccc")
def __d(self):
print("dddd")
def e(self):
self.__d()
if __name__ == '__main__':
m=S()
m.a()
m.b()
m.c()
m.e()
class student():
age = 0
name = "studentname"
def __init__(self,age,name):
self.age = age
self.name = name
if __name__ == '__main__':
a=student(18,"hello")
print(a.name)
print(a.age)
print(student.age)
五、类中的实例方法、动态方法、静态方法

 class People(object):
def __init__(self,name):
self.name = name #实例变量
def play(self): #实例方法
print(self.name + '打篮球')

#创建对象
p = People('xiaowang')
People.play() #类调用实例方法
p.play() #对象调用实例方法


#类方法
@classmethod
def func1(cls):
cls.name1 = '我是一个类方法' #定义一个类变量
print (cls.name1)


 #静态方法
@staticmethod
def func2():
print ('我是一个静态方法')


六、类的三大特性

封装特性
1、类里面不光有属性还有方法。
2、这种将属性通过方法直接在类内部操作的形式叫做封装。这里的封装是把属性封装在类内部。 


继承特性
1、继承:类的继承是面向对象程序设计的一个重要思想,继承时子
类可以继承父类的内容,包括成员变量和成员函数。
2、在继承中一个类被另外一个类继承这个类称之为父类也称之为基
类,则另外一个类则为子类也称之为派生类


多态特性
1、多态是以继承和重写父类方法为前提,对所有子类实例化产生的对象
调用相同的方法,执行产生不同的执行结果。
2、例如同样是人,但是当问起一个人的职业时会有不同的结果,可能是
软件测试工程师,可能是HR
3、一个对象的属性和行为不是由他所继承的父类决定的,而是由其本身
包含的属性和方法决定的

class Animal(object):
def talk(self):
print('我是动物')
class Cat(Animal):
def talk(self):
print('喵喵')
class Dog(Animal):
def talk(self):
print('汪汪')
c = Cat()
c.talk()

七、封装
(1)封装定义:
封装就是指隐藏对象中一些不希望外部所访问到的属性或方法,即为了保证安全。
概念:指的是在设计类时,不对外提供,隐藏起来,提供公共方法以外边对其方法。(就是把属性和方法封装到一个抽象的类中)
封装的相当于一个黑盒子,我们将事物相关的属性和方法封装在一个类中,
在调用类创建实例,不用关心类内部代码的实现的细节,我们只要调用结果就可以

(2)封装的优点:
封装数据可以很好的保护隐私,(将不需要对外提供的内容都隐藏起来)
封装方法主要原因是隔离复杂度
封装提高了代码的复用性。
隐藏对象的属性和实现细节,提供公共方法对其访问

(3)python类的封装两种
公用(共有):类中的变量和方法公用;他们名称前都没有下划线,公有的变量和方法,在类的外部,内部,以及子类都可以使用

私有:在类中的变量或方法下,下划线__开头命名,则改变变量或方法为私用,私有的变量和方法,只能在本类内部使用,类的外部以及子类都无法使用。

私有属性
格式:__属性名=值 在类的外部不能使用(对象不能调用属性)
私用化封装后的限制:
(1)类可以访问
(2)类外/对象外 不可访问
(3)子类和子类对象 不可访问

数据封装
class people():
def __init__(self,name,age):
self.name=name
self.age=age
方法封装
class people1():
def init(self,name,age):
self.name=name
self.age=age
def get_name(self):
return self.name

通过在变量前加一个下划线







评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册