一、对象的结构初识:
类包括两部分:静态属性和方法
class A:
name='alex' #静态属性
def fun(self): #动态属性,即方法
pass
函数和面向对象的区别:
1、函数是封装一个功能,面向对象是封装多个相关功能!
2、面向对象很抽象,它是一种思想。
3、程序可扩展,对象都是一个个独立的,具有耦合性和差异性。
二、类,对象
类,是具有相同属性或者功能的一类实物。对象,是类的具体体现。
我们可以把类想象成是一个公共框架,一个公共模型:
定义一个类:
class Person:
animal = '高级动物'
walk_way = '直立行走'
language = '语言'
def eat(self):
print('该吃吃,该喝喝,啥事别忘心里搁')
def work(self):
print('人类都需要工作。。。')
(1)类名的使用:
1、查看类中的所有属性及方法,使用: __dict__ 方法
print(Person.__dict__) #以字典的形式输出类中的所有方法及属性
print(Person.__dict__['animal']) # 通过__dict__方式单独的属性及方法可以查,但是不能增删改
Person.__dict__['animal'] = '低级动物'
Person.__dict__['name'] = 'alex' #这个会报错,所以不能增
print(Person.__dict__)
注:在工作中或者学习中,一般用到__dict__方法的都是查看类中的所有属性及方法,不进行其他操作。
2,查看(增删改)类中某个或者某些属性及方法用万能的点'.'
查
print(Person.animal)
print(Person.language)
增
Person.name = 'alex'
print(Person.name)
改
Person.animal = '低级动物'
删
del Person.walk_way
print(Person.__dict__)
3,操作方法一般不通过类名操作!!!
Person.__dict__['work'](111) #不建议通过__dict__执行方法
Person.work(666) #虽然可以执行但是不建议
(2)对象
例1:
class Person:
animal = '高级动物'
walk_way = '直立行走'
language = '语言'
def __init__(self): # 这个函数的作用:给对象封装属性的。
pirnt(self)
def eat(self):
print('该吃吃,该喝喝,啥事别忘心里搁')
def work(self):
print('人类都需要工作。。。')
obj=Person()
print(obj)
执行的结果是:
<__main__.Person object at 0x00000000021E7B00>
<__main__.Person object at 0x00000000021E7B00>
到这里我们看到执行结果是一样的,都是指向同一个内存地址。类名+()实例化一个对象空间后自动传值给self。
例2:实例化一个具体的对象
class Person:
animal = '高级动物'
walk_way = '直立行走'
language = '语言'
def __init__(self,name,age,eye): # 这个函数的作用:给对象封装属性的。
self.name1 = name
self.age1 = age
self.eye1 = eye
def eat(self):
print('该吃吃,该喝喝,啥事别忘心里搁')
def work(self):
print('人类都需要工作。。。')
obj=Person('alex',1000,'小眼睛') #类名+(),指的是一个类实例化过程,他会实例化一个对象(它会在内存实例化一个对象空间)。
print(obj.name1)
实例化过程内部进行了三个阶段:
1、在内存中开辟了一个对象空间,内部只有一个类对象指针;
2、自动执行类中的__init__方法(形成类对象指针),并且将对象空间自动传给self参数,其他参数手动传入。
3、执行__init__方法,给对象空间封装相应的属性。
对象的操作:
1、对象操作对象空间
print(obj.__dict__) #对象查看对象空间所有的属性__dict__
2、对象操作对象的某个属性(增删改查)使用万能的点'.'
增:obj.sex = '男'
删:del obj.eye1
改:obj.eye1 = '大一点'
print(obj.name1) #对象可以查看类的中的属性即方法
print(obj.__dict__)
3、对象操作类空间的属性,只能查,不能做其它的操作
print(obj.animal)
obj.animal = '低级动物' #会报错的
print(obj.animal)
print(obj.__dict__)
print(Person.__dict__)
4、对象操作类空间的方法
obj.eat()
问题:
1、对象为什么能调用类中的属性与方法而且只是调用,不能改变?
对象空间.属性名
先从对象自己空间中去找,如果没有此属性他会通过类对象指针从类去找,类中找不到,会从父类去找。
2、对象只能查看类中的属性,不能增删改类中的属性。
3、类能不能调用对象的属性?不能!
4、对象与对象之间可不可互相调用?
同一个类实例化出来的对象之间是不能互相访问的,不同类实例化的对象有可能互相访问。
5、给对象封装属性:__init__方法可以在任意位置添加。