一、面向对象初识:
1、结构上理解:类由两部分组成
class A: # class是类的关键字,类名首字母默认大写
name = 'alex' # 静态属性,静态变量,静态字段
def func1(self): # 函数,动态属性,方法
pass
2、函数 vs 面向对象:
1、函数封装一个功能,而面向对象封装多个相关的功能。
2、面向对象抽象,它是一种思想,站在上帝的角度去理解它。
3、程序可扩展,对象都是一个个独立的,耦合性,差异性。
def register(argv): pass def login(argv): pass def shoppingcar(argv): pass class Shopping_Car: def __init__(self): # 特殊方法 pass def register(self): pass def login(self): pass def shoppingcar(self): pass
3、类,对象
类:具有相同属性或者功能的一类实物。
对象:对象是类的具体表现。
二、类名,对象的使用:
一个公共框架,一个公共模型
类名:
1、查看类中的所有属性及方法 __dict__(查看单个属性和方法也可以用__dict__[ ],但不建议用)
2、查看,(增删改)类中的某个,某些属性用(万能的点).
3、操作方法,一般不通过类名操作!!!
class Person: animal = '高级动物' walk_way = '直立行走' language = '语言' def eat(self): print('吃饭') def word(self): print('人类需要工作') print(Person.__dict__) # 查 所有的属性和方法 print(Person.animal) # 查 Person.animal = '低级动物' # 改 Person.name = 'alex' # 增 del Person.animal # 删 print(Person.name) print(Person.animal) Person.eat(12) # 执行一个方法 print(Person.word(123)) # 执行方法并返回 None Person.age = 18 print(Person.age)
对象:
实例化过程内部进行了三个阶段:
1、在内存中开辟了一个对象空间
2、自动执行类中的__init__方法,并且将对象空间自动传给self参数,其他参数手动传入
3、执行__init__方法,给对象空间封装相应的属性。
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) # 对象空间的内存地址 print(obj.name1)
对象操作对象空间:
1、查看对象空间所有的属性 __dict__
print(对象名.__dict__)
2、对象操作对象的某个属性(增删改查)用(万能的点)
obj.sex = '男' # 增 del obj.eye1 # 删 obj.eye1 = '大一点' # 改 print(obj.name1) # 查 单个 print(obj.__dict_) # 查 全部对象(返回一个字典) # alex # {'name1': 'alex', 'age1': 1000, 'eye1': '小眼睛'}
3、对象操作类空间的属性:只能查
print(obj.animal) # 现在对象空间找,没有的话到类空间里找 obj.animal = '低级动物' # 不能改变类空间的属性,所以是新增一个对象属性 print(obj.animal) # 打印的是对象空间里新增的属性 print(obj.__dict__) print(Person.__dict__)
4、对象操作类空间的方法
print(obj) # 打印对象空间内存地址 obj.eat() # 对象操作类空间的方法
三、类名称空间,对象名称空间:
1、对象为什么能调用类中的属性与方法而且只是调用,不能改变?
先从自己空间找,没有此属性他会通过类对象指针去类空间找,类中找不到到父类中找
对象只能查看类中的属性,不能增删改类中的属性。
2、类能不能调用对象的属性? 不能
3、对象与对象之间可不可以互相调用?
同一个类实例化出来的对象之间是不能互相访问的
不同类实例化 对象有可能互相访问
给对象封装属性:对象名.__init__ (任意位置)