首先在结构上理解:面向对象分为两部分。
class A : name = 'alex' #静态属性,也可以叫静态变量或者静态字段,最好叫静态属性!! def func1( self ) #函数 动态属性。 最好叫 方法!!! pass
说一下函数和面向对象的区别
函数 def register(argv): pass ---------------------------- 面向对象 class Shopping_Car: def __init__(self): # 特殊方法 pass def register(self): pass def login(self): pass def shoppingcar(self): pass
1 函数封装一个功能,而面向对象封装多个相关的功能。
2 面向对象比较抽象,它是一种思想,你得站在上帝的角度理解,你就是神。
3 程序可扩展,对象都是一个个独立的,耦合性,差异性。
~~~类和对象~~~
##类:具有相同属性或者功能的一类实物
##对象:对象是类的具体体现
一个公共框架,一个公共模型
class Person: animal = '高级动物' walk_way = '直立行走' language = '语言' def eat(self): print('该吃吃,该喝喝,啥事别忘心里搁') def work(self): print('人类都需要工作。。。') -----------------------
类名 就是Person
1 查看类中的所有属性及方法 _ _dict_ _ 两个干干是没有空隙的 在博客显示太贴在一起了
所以我动手分开了点。
print(Person.__dict__) 可以查看所有 虽然可以从这干其他的 但是不推荐,太麻烦了,所以就不写出来了 ,记住 这个方法就用来查看所有,工作和学习中一般用到_ _dict_ _查看类中所有属性及方法,不进行其他的操作。
2 查看 (增 删 改)类中某个,某些属性 用 万能的 . 点 。
print (Person . animal) #查
Person.name = 'alex' #增
Person.animal = ' 超级人' # 改 注意一下 增 和改其实挺像的,增加 就是对象中没有 就直接增加了,改是有的 =右边直接改了
del Person . walk_way # 删
3 操作方法 一般不通过类名操作!!!
Person.work(1) 括号里随便输入 就能执行了
对象
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(self) print('该吃吃,该喝喝,啥事别忘心里搁') def work(self): print('人类都需要工作。。。') obj = Person('alex',1000,'小眼睛') # 这个过程是一个实例化过程,他会实例化一个对象(他会在内存实例化一个对象空间)。 # print(obj) # print(obj.name1) # print(obj.age1) # print(obj.eye1)
对象:对象操作对象空间----对象操作对象空间所有的属性 _ _dict_ _
print(obj.__dict__)
对象操作对象的某个属性,增删改查 用 万能点 . 基本都是通过obj 来 默认就是写obj 比较有逼格
del obj.eye1 # 删
obj.sex = '男' # 增
obj.eye1 = '大一点' # 改
print(obj.animal) #查
对象操作类空间的方法
obj.eat()
实例化过程内部进行了三个阶段:
1,在内存中开辟了一个对象空间
2,自动执行类中的__init__方法,并且将对象空间自动传给self参数,其他参数手动传入。
3, 执行__init__方法 给对象空间封装相应的属性。 下面插个图
公用模版,公共框架
class GameRole: rule = '游戏规则' hp = 1800 def __init__(self,area,nickname,hp,ad): self.area = area self.nickname = nickname self.hp = hp self.ad = ad def attack(self): print('谁施展了一个攻击') def pen(self): self.pen=10000 gailun = GameRole('德玛西呀','草丛伦',1000,75) yasuo = GameRole('艾欧尼亚','托儿所',500,150) penzi = GameRole('中国','键盘侠',10,100) # penzi.pen = 10000 penzi.pen() print(penzi.__dict__)
1 对象为什么能调用类中的属性与方法而且只是调用,不能改变
gailun. 属性名, 先从自己的空间去找,如果没有此属性 他会通过类对象指针从类去找,如果类中找不到,会从父类中找。
gailun.attcak = 666 # 给对象增加一个属性 attcak = 666
##对象只能查看类中的属性,不能增删改 类中的属性
2 类能不能调用对象的属性? 不能
print(GameRole.area) 直接报错
3 对象与对象之间 可不可以 相互调用?
同一个类 实例化出来的对象之间 是不能相互访问的! (但是可以有方法可以联系一波应该 ,想一下 比如 游戏里 两个英雄 合体技能 )
不同类 实例化的对象有可能互相访问
# 给对象封装属性:_ _init_ _ 任意位置 ,也可以在对象空间中 也可以在类空间