基础概念
- 抽象:从具体事物中抽离出共性、本质,舍弃个别、非本质过程。
- 类:一个抽象的概念,即生活中的”类别”。
- 对象:类的具体实例,即归属于某个类别的”个体”。
- 类是创建对象的”模板”。
-- 数据成员:名词类型的状态。
-- 方法成员:动词类型的行为。
学习提示----->关注内存变化
第一次学习的练习
语法
定义类
代码
class 类名:
“””文档说明”””
def _init_(self,参数列表):
self.实例变量 = 参数
方法成员
说明
-- 类名所有单词首字母大写.
-- _init_ 也叫构造函数,创建对象时被调用,也可以省略。
-- self 变量绑定的是被创建的对象,名称可以随意。
创建对象(实例化)
变量 = 构造函数 (参数列表)
实例成员
实例变量
语法
- 定义:对象.变量名
- 调用:对象.变量名
说明
首次通过对象赋值为创建,再次赋值为修改.
通常在构造函数(_init_)中创建。
每个对象存储一份,通过对象地址访问。
作用
描述某个对象自己的数据。
__dict__
对象的属性,用于存储自身实例变量的字典。
实例方法
语法
(1) 定义:
def 方法名称(self, 参数列表):
方法体
(2) 调用: 对象地址.实例方法名(参数列表)
不建议通过类名访问实例方法
说明
(1) 至少有一个形参,第一个参数绑定调用这个方法的对象,一般命名为"self"。
(2) 无论创建多少对象,方法只有一份,并且被所有对象共享。
作用
表示对象行为。
类成员
类变量
语法
定义:在类中,方法外定义变量。
class 类名:
变量名 = 表达式
调用:
类名.变量名
不建议通过对象访问类变量
说明
(1) 存储在类中。
(2) 只有一份,被所有对象共享。
作用
描述所有对象的共有数据。
类方法
语法
定义:
@classmethod
def 方法名称(cls,参数列表):
方法体
调用:类名.方法名(参数列表)
不建议通过对象访问类方法
说明
(1) 至少有一个形参,第一个形参用于绑定类,一般命名为'cls'
(2) 使用@classmethod修饰的目的是调用类方法时可以隐式传递类。
(3) 类方法中不能访问实例成员,实例方法中可以访问类成员。
作用
操作类变量
静态方法
语法
定义:
@staticmethod
def 方法名称(参数列表):
方法体
调用:类名.方法名(参数列表)
不建议通过对象访问静态方法
说明
(1) 使用@ staticmethod修饰的目的是该方法不需要隐式传参数。
(2) 静态方法不能访问实例成员和类成员
作用
定义常用的工具函数。
练习
'''
类成员
'''
'''
##第一部分初次学习使用
class ICBC:
#工商银行
# 类变量
total_money = 10000000
# 模拟表示总部的金融状况
def __init__(self,name,money):
self.name=name
self.money=money
#类变量
#类名称.变量名
ICBC.total_money -= money
i01=ICBC("维扬支行",100000)
i02=ICBC("广陵支行",100000)
print("总部的经济状况%d"%ICBC.total_money)
'''
##第二部分学习使用
class ICBC:
#工商银行
# 类变量
total_money = 10000000
@classmethod
def print_total_money(cls):
print("总部的经济状况%d"%ICBC.total_money)
#print(cls,ICBC)
#两种方法一样,下面的方法可能存在部分版本编译器不支持
# 模拟表示总部的金融状况
def __init__(self,name,money):
self.name=name
self.money=money
#类变量
#类名称.变量名
ICBC.total_money -= money
i01=ICBC("维扬支行",100000)
i02=ICBC("广陵支行",100000)
ICBC.print_total_money()
#print("总部的经济状况%d"%ICBC.total_money)
整体练习
'''
类&对象 整体练习
'''
'''
练习:定义对象计数器
定义 Genshin类,创建3个角色
通过类变量记录角色个数
通过类方法打印角色个数
'''
class Genshin:
count_role=0
@classmethod
def print_count_role(cls):
print("原神有%d个角色"%cls.count_role)
def __init__(self,name):
self.name=name
Genshin.count_role+=1
role01=Genshin("甘雨")
role02=Genshin("刻晴")
role03=Genshin("凝光")
Genshin.print_count_role()
不建议代码
#以下方法都不建议
class Student:
pass
s01=Student()
s01.name="张三"
s01.sex="男"
############
class Student1:
def __init__(self,name,sex):
self.name=name
self.sex=sex
self.fun01()#这个也是创建实例变量
def fun01(self):
self.aaa=10
s01=Student1()
s01.name="张三"
s01.sex="男"