类: 具有相同属性和技能的一类事物
#对象:具体类的实例化表现
class Person: #类名的首字母必须大写
'''
类体只分两部分:变量部分和方法(函数)部分;
名词归于变量,动词归于方法。
'''
mind = '有思想' #变量 静态变量 静态字段
animal = '高级动物'
faith = '有信仰'
def __init__(self,name,age,hobby): #构造函数
self.name = name #相当于 变量名 = 实例化需要传入的值
self.age = age
self.hobby = hobby
def work(self): #方法 函数 动态变量
print("都要工作...")
def shop(self):
print("都要消费...")
1、类名操作角度:
1.1操作类中的静态变量:(重要)
#方法1:Person.__dict__ 查询类中所有内容(增删改不可操作)
print(Person.__dict__) #返回当前类中所有内容,返回的数据格式是字典
print(Person.__dict__["animal"]) #根据key查询对应value
"""
Person.__dict__["animal"] = '无脑'
print(Person.__dict__["animal"]) #会报错,__dict__不可进行增删改
"""
#方法2:万能的点 对类中单个变量进行增删改查
print(Person.animal) #查
Person.money = '运用货币' #增
Person.mind = '无脑' #改
del Person.animal
print(Person.__dict__)
2、对象角度:
Person() #类名()的这个过程叫实例化一个对象 (创建一个对象的过程)
#ret = Person() ret代表的就是这个对象,ret的值和返回给self的值是一样的
ret = Person('alex',18,'lady') #实例化对象
print(ret.__dict__) #打印内容:{'name': 'alex', 'age': 18, 'hobby': 'lady'}
类名() 内部执行过程:
#1)产生一个实例(对象,可以理解成产生一个对象空间,内存地址)
#2)在实例过程中最先执行__new__方法,用来创造一个对象然后再自动执行类中的__init__ 方法,并将该对象的内存地址传给函数里第一个位置参数,约定俗成叫self
#3)给对象封装相应的属性(变量)
2.1 对象操作对象中的静态变量
#1、__dict__ 查看对象中所有的内容
ret = Person('alex',18,'lady')
print(ret.__dict__)
#2、万能点操作
print(ret.name) #查询
ret.high = '175' #增
print(ret.high) #查单个的值
print(ret.__dict__) #查该对象下所有的内容
del ret.name #删
ret.age = 73 #改
2.2 对象操作类中的静态变量 #只能查询
print(ret.name)
2.3对象操作类中的方法 (常用)
ret.shop()
#对象调用类中的所有方法,默认第一个参数self是不用传的,同__init__,self的值就是ret的值 (对象的内存地址)
说明1:通过类名.变量名 可以修改变量值,但对象名.变量名不可以修改,只会在当前命名空间中新增一个局部变量
class Count:
count = 0
def __init__(self):
pass
#通过类名可以更改类中静态变量值
Count.count = 6
print(Count.__dict__) #此时查到静态变量值改为6
#但是通过对象,不能改变 只能引用静态变量值
obj1 = Count()
print(obj1.count) # 0
obj1.count = 6 #该操作是给对象空间添加一个变量count = 6 ,修改的并不是静态变量值
print(obj1.count) # 6
说明2:
'''
count = 0
def func():
print(count)
func() #函数里全局变量count可直接调用并打印
'''
class Count:
count = 0
def __init__(self):
# print(count) #在类中这么使用会报错,应用print(Count.count)
#类Count是全局的,但变量count属于局部变量,若想直接用必须用类名.变量名引用
Count.count = Count.count + 1
obj1 = Count() # 实例化一个对象
obj1 = Count()
obj1 = Count()
#print(Count.count)
print(obj1.count)