百木园-与人分享,
就是让自己快乐。

面向对象学不会看不懂?一文详解面向对象知识点总结

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

Python免费学习资料、代码以及交流解答点击即可加入

 

一、类与对象

1.1、类的结构

class Human:
\"\"\"
此类主要是构建人类
\"\"\"
mind = \'有思想\' # 第一部分:静态属性 属性 静态变量 静态字段
dic = {}
l1 = []

def work(self): # 第二部分:方法 函数 动态属性
print(\'人类会工作\')

1.2、从类名的角度研究类

1.2.1、类名操作静态属性

1)查看类中的所有内容:类名__dict __方式

class Human:
\"\"\"
此类主要是构建人类
\"\"\"
mind = \'有思想\'
dic = {}
l1 = []

def work(self):
# print(self)
print(\'人类会工作\')

print(Human.__dict__)
# {\'__module__\': \'__main__\', \'__doc__\': \'\\n 此类主要是构建人类\\n \', \'mind\': \'有思想\', \'dic\': {}, \'l1\': [], \'work\': <function Human.work at 0x0000017D90897438>, \'__dict__\': <attribute \'__dict__\' of \'Human\' objects>, \'__weakref__\': <attribute \'__weakref__\' of \'Human\' objects>}

print(Human.__dict__[\'mind\']) # 有思想
# Human.__dict__[\'mind\'] = \'无脑\' # TypeError: \'mappingproxy\' object does not support item assignment
# 通过这种方式只能查询,不能增删改.

2)通过万能的点.

# 通过万能的点 可以增删改查类中的单个属性
class Human:
\"\"\"
此类主要是构建人类
\"\"\"
mind = \'有思想\'
dic = {}
l1 = []

def work(self):
# print(self)
print(\'人类会工作\')

print(Human.mind) # 查
Human.mind = \'无脑\' # 改
print(Human.mind)
del Human.mind # 删
Human.walk = \'直立行走\'
print(Human.walk)

总结:如果想查询类中的所有内容,通过 第一种__ dict__方法,如果只是操作单个属性则用万能的点的方式。

1.2.2、类名操作动态方法

前提:除了两个特殊方法:静态方法,类方法之外,一般不会通过类名操作一个类中的方法

class Human:
mind = \'有思想\'
dic = {}
l1 = []

def work(self):
print(self)
print(\'人类会工作\')

def tools(self):
print(\'人类会使用工具\')

Human.work(111)
Human.tools(111)
# 下面可以做,但不用
Human.__dict__[\'work\'](111)

1.3、从对象角度研究类

1.3.1、什么是对象

对象是从类中出来的,只要是类名加上(),这就是一个实例化过程,这个就会实例化一个对象

class Human:
mind = \'有思想\'

def __init__(self):
print(666)
print(self) # <__main__.Human object at 0x00000191508AA828>

def work(self):
print(\'人类会工作\')

def tools(self):
print(\'人类会使用工具\')

obj = Human() # 只要实例化对象,它会自动执行__init__方法
print(obj) # <__main__.Human object at 0x00000191508AA828>
# 并且obj的地址与self的地址相同

对象实例化三件事:

  • 1)在内存中开辟了一个对象空间
  • 2)自动执行类中的init方法,并将这个对象空间(内存地址)传给了init方法的第一个位置参数self
  • 3)在init方法中通过self给对象空间添加属性

class Human:
mind = \'有思想\'
language = \'使用语言\'

def __init__(self, name, sex, age, hobby):
# self 和 obj 指向的是同一个内存地址同一个空间,下面就是通过self给这个对象空间封装四个属性。
self.n = name
self.s = sex
self.a = age
self.h = hobby

obj = Human(\'barry\', \'男\', 18, \'运动\')

1.3.2、对象操作对象空间属性

1)对象查询对象中所有属性:对象.__ dict__

class Human:
mind = \'有思想\'
language = \'实用语言\'

def __init__(self, name, sex, age, hobby):
# self 和 obj 指向的是同一个内存地址同一个空间,下面就是通过self给这个对象空间封装四个属性。
self.n = name
self.s = sex
self.a = age
self.h = hobby

obj = Human(\'barry\', \'男\', 18, \'运动\')
print(obj.__dict__) # {\'n\': \'barry\', \'h\': \'运动\', \'s\': \'男\', \'a\': 18}

2)对象操作对象中的单个属性:万能的点 .

class Human:
mind = \'有思想\'
language = \'实用语言\'

def __init__(self, name, sex, age, hobby):
# self 和 obj 指向的是同一个内存地址同一个空间,下面就是通过self给这个对象空间封装四个属性。
self.n = name
self.s = sex
self.a = age
self.h = hobby

obj = Human(\'barry\', \'男\', 18, \'运动\')
obj.job = \'IT\' # 增
del obj.n # 删
obj.s = \'女\' # 改
print(obj.s) # 查
print(obj.__dict__) # {\'s\': \'女\', \'a\': 18, \'h\': \'运动\', \'job\': \'IT\'}

1.3.3、对象查看类中的属性

class Human:
mind = \'有思想\'
language = \'实用语言\'

def __init__(self, name, sex, age, hobby):
self.n = name
self.s = sex
self.a = age
self.h = hobby

obj = Human(\'barry\', \'男\', 18, \'运动\')
print(obj.mind) # 有思想
print(obj.language) # 实用语言
obj.a = 666
print(obj.a) # 666

1.3.4、对象操作类中的方法

class Human:
mind = \'有思想\'
language = \'实用语言\'

def __init__(self, name, sex, age, hobby):
self.n = name
self.s = sex
self.a = age
self.h = hobby

def work(self):
print(self)
print(\'人类会工作\')

def tools(self):
print(\'人类会使用工具\')

obj = Human(\'barry\', \'男\', 18, \'运动\')
obj.work()
obj.tools()

类中的方法一般都是通过对象执行的(除去类方法,静态方法外),并且对象执行这些方法都会自动将对象空间传给方法中的第一个参数self

self定义:self其实就是类中方法(函数)的第一个位置参数,只不过解释器会自动将调用这个函数的对象传给self。所以咱们把类中的方法的第一个参数约定俗成设置成self, 代表这个就是对象

1.4、类空间问题

1.4.1、何处可以添加对象属性

class A:
def __init__(self, name):
self.name = name

def func(self, sex):
self.sex = sex

# 类外面可以:
obj = A(\'barry\')
obj.age = 18
print(obj.__dict__) # {\'name\': \'barry\', \'age\': 18}

# 类内部也可以:
obj = A(\'barry\') # __init__方法可以。
obj.func(\'男\') # func 方法也可以。

总结:对象的属性不仅可以在__ init__里面添加,还可以在类的其他方法或者类的外面添加

1.4.2、何处可以添加类的静态属性

class A:
def __init__(self, name):
self.name = name

def func(self, sex):
self.sex = sex

def func1(self):
A.bbb = \'ccc\'

# 类的外部可以添加
A.aaa = \'taibai\'
print(A.__dict__[\'aaa\']) # taibai

# 类的内部也可以添加。
A.func1(111)
print(A.__dict__[\'bbb\']) # ccc

总结:类的属性不仅可以在类内部添加,还可以在类的外部添加

1.4.3、对象如何找到类的属性

 

面向对象学不会看不懂?一文详解面向对象知识点总结

来源:https://www.cnblogs.com/python147/p/14529136.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 面向对象学不会看不懂?一文详解面向对象知识点总结

相关推荐

  • 暂无文章