我的Python之旅第六天--面向对象初识

时间:2022-04-30 19:13:18

一、概念

类:是具有相同属性的技能的一类实物

对象:实例化的一个类,是类的具体体现

class Person:
'''内容'''
animal='高级动物'
soul='有思想'
#animal,soul为静态变量 def __init__(self,name,sex,eye,high,weight): #这是构造方法
self.name=name #属性
self.sex=sex
self.eye=eye
self.high=high
self.weight=weight
print(666) def work(self): #动态变量,动态方法,方法
print(self)
print('人会工作')

二 操作静态变量的两种方式:

1 类名.__dict__方法 只能查看,不能增删改。

1.1 查看全部静态变量

print(Person.__dict__)
结果为:{'__module__': '__main__', '__doc__': '内容', 'animal': '高级动物', 'soul': '有思想', '__init__': <function Person.__init__ at 0x000002100833A8C8>, 'work': <function Person.work at 0x000002100833A950>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>}

1.2查看单个静态变量

print(Person.__dict__['animal'])
结果为:
高级动物

2 类名.变量名 可增删给查

2.1 查

print(Person.animal)
结果为:
高级动物

2.2 增加

Person.kind='有性格'
print(Person.kind)
结果为:
有性格

2.3 删

del Person.kind

三 类操作方法的两种方式

1 类名.dict方法名

print(Person.__dict__['work'](11))
结果为:
11
人会工作
None

2 类名.方法名()

Person.work(222)
结果为:
222
人会工作

3 如果类操作方法:类名.方法名()

只要创建一个类,里面的内容就已经加载到内存中

四 对象

1 概念

对象:类名() 实例化一个对象

2 实例化

实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征

(1)实例化一个对象,在内存中产生一个对象空间

(2)自动执行init方法,并将这个空间对象<main.Person object at 0x0000000001F5ABE0> 传给self

(3)通过构造方法里的代码给空间对象添加一些属性,并返回给对象

例如:

p1=Person('张三','男','大眼睛',176,170)
print(p1.__dict__)
结果为:
{'name': '张三', 'sex': '男', 'eye': '大眼睛', 'high': 176, 'weight': 170}

五 对象操作属性变量的两种方式

1 对象.__dict__方法,只能查看不能增删改

p2=Person('李四','男','小眼睛',170,170)
print(p2.__dict__)
结果为:
{'name': '李四', 'sex': '男', 'eye': '小眼睛', 'high': 170, 'weight': 170}

2 对象.变量名,可增删改查

2.1 查

print(p2.name)
结果为:
李四

2.2 增加

p2.color='黄皮肤'
print(p2.color)

2.3 删除

del p2.name
print(p2.__dict__)
结果为:
{'sex': '男', 'eye': '小眼睛', 'high': 170, 'weight': 170, 'color': '黄皮肤'}

2.5 改

print(p2.__dict__)
p2.name='王麻子'
print(p2.__dict__)
结果为:
{'name': '李四', 'sex': '男', 'eye': '小眼睛', 'high': 170, 'weight': 170}
{'name': '王麻子', 'sex': '男', 'eye': '小眼睛', 'high': 170, 'weight': 170}

3 可以访问类的静态变量

3.1 查询全部变量

print(p2.__dict__)
{'name': '李四', 'sex': '男', 'eye': '小眼睛', 'high': 170, 'weight': 170}

3.2 查询单个变量,类名.变量名

print(p2.animal)
结果为:
高级动物

六 对象操作的两种方式

1 对象.方法名()

p2.work()
结果为:
<__main__.Person object at 0x0000025324099D68>
人会工作
print(p2.__dict__)
{'name': '李四', 'sex': '男', 'eye': '小眼睛', 'high': 170, 'weight': 170}

2 类名.方法名()

Person.work('abc')
abc
人会工作

七 类空间、对象空间

class Person:
animal='高级动物'
soul='有思想'
name='孙悟空' def __init__(self,name,sex,eye,high,weight):
self.name=name
self.sex=sex
self.eye=eye
self.high=high
self.weight=weight
print(666)
def work(self,job):
print('人会工作') p1=Person('alex','女','小眼睛',178,160) print(p1.name)
print(p1.soul)
print(p1.__dict__)
print(p1.eye)
p1.work('IT')
print(p1.__dict__)
结果为:
666
alex
有思想
{'name': 'alex', 'sex': '女', 'eye': '小眼睛', 'high': 178, 'weight': 160}
小眼睛
人会工作
{'name': 'alex', 'sex': '女', 'eye': '小眼睛', 'high': 178, 'weight': 160}

可以看到self约定俗成叫self,不能改变

通过实例化对象查找属性时,先从对象空间找,没有则通过类对象指针从类空间找。