一、类的创建
1、要获取一个对象所对应的类,需要使用class来进行检索
下面创建一个类
#格式: class 典名(object)
'''创建类时要用你class方法进行定义和检索'''
class Definite: #这里的class Definite就叫做一个类对象
pass '''Definite为类的名称(类名),一个类可以由一个或多个单词来定义,
每个单词的首字母大写,其余部分小写'''
在Python中一切皆对象,那在这里可以用id()、type()方法查看是否开辟了内存空间和查看数据类型
print(id(Definite))
print(type(Definite)) #数据类型时class类型
print(Definite)
29456744
<class 'type'>
<class '__main__.Definite'> #对应的就是Definite的值
2、在类中有类属性、实例方法、静态方法和类方法组成
class practice: #类对象
'''(1)直接在类中定义的变量叫做类变量'''
native_place='山东' #类变量 直接在类中定义的变量叫做类变量,也叫类属性
#实例方法
def work(self):
print('我现在正在学Python') #在类外面定义的叫做函数,在类之内定义的叫做方法
'''在定义完方法名后括号内自动生成变量self,也可改成其他单词,一般程序员默认用的是self'''
#静态方法
@staticmethod #必须要引用staticmethod方法
def smmethod(): #这里括号里面不能有东西,不能写self,这是规定
print('静态方法这里使用了staticmethod方法进行修饰,所以我是静态方法')
#类方法 使用classmethod方法进行修饰
@classmethod
def cmmethod1(cls): #括号里面必须要跟上cls(class缩写),也可以用其他单词代替_
print('这里用的classmethod方法进行修饰,所以是类方法')
#初始化方法 def _init_(self)
def __init__(self,name,age): #括号里面必须有self,在后面可以继续跟变量名 name和age相当于函数体内的局部变量
self.name=name #self.name成为实例属性,进行了赋值操作,将局部变量name的值赋给了实例属性 self.后面单词可以是别的,习惯上写name
self.age=age #这两步为赋值操作
此时practice这个类就创建完毕了,它现在就相当于是一个模板,以供待会要创建的对象使用
类的组成 | 作用 |
初始化方法 | 使用初始化方法创建实例对象 |
类属性 | 直接写在类里的属性称为类属性 |
实例方法 | 实例方法是类的实例对象能够调用的方法 |
静态方法 | 没有默认参数,不能使用类或者实例的任何属性和方法,用装饰器 @staticmethod 修饰 |
类方法 | 有默认参数,可以使用类的属性和方法,但不能使用实例的属性和方法,用装饰器 @classmethod 修饰 |
二、对象的创建
1、一开始定义的类叫做类对象,根据类对象创建出来的叫做实例对象
'''创建practice类的实例对象'''
prac1=practice('张三',21) #创建的是实例对象
print(id(prac1))
print(type(prac1))
print(prac1) #结果中的20048528和内存地址0x0131EA90是相等的
print('-----------------------')
print(id(practice))
print(type(practice))
print(practice)
'''上面的是practice类的一个对象的内存地址,下面是这个practice类的内存地址'''
25547280
<class '__main__.practice'>
<__main__.practice object at 0x0185D210>
-----------------------
26180416
<class 'type'>
<class '__main__.practice'>
prac1.work() #这里直接写实例对象名.类中的函数名你,写类名称.函数名会报错
#对象名.方法名
print(prac1.name)
print(prac1.age)
print('-----------------------')
practice.work(prac1) #这里的代码和prac1.work()作用相同
#类名.方法名(类的对象)----->实际上就是该方法定义处的self
我现在正在学Python
张三
21
-----------------------
我现在正在学Python
2、类属性、类方法、静态方法的创建
(1)、使用类属性:
print(practice.native_place)
prac1=practice('张三',20)
prac2=practice('李四',30)
print(prac1.native_place)
print(prac2.native_place)
print('===============================')
#更改类属性的值 类名。类变量名=新值
practice.native_place='青岛'
print(prac1.native_place)
print(prac2.native_place)
山东
山东
山东
===============================
青岛
青岛
当类中的类变量值发生改变后,实例对象所引用的也跟着发生变化
(2)调用类方法:类名.类方法名
practice.cmmethod1()
这里用的classmethod方法进行修饰,所以是类方法
(3)调用静态方法:类名.静态方法名
practice.smmethod() #跟类方法不同,没有默认参数
静态方法这里使用了staticmethod方法进行修饰,所以我是静态方法
在实例方法中,prac1.work()和practice.work(prac1)两种方法效果是一样的。一个是用实例对象名.方法名,一个是类名.方法名,括号里面穿的是对象名