面向对象

# python中一切皆为对象,且python3统一了类与类型的概念,类型就是类

# 特征即数据属性,技能即方法属性,特征与技能的结合体就一个对象。

# 从一组对象中提取相似的部分就是类
# 对象是特征(变量)与技能(函数)的结合体
# 而类是一系列对象共同的特征与技能的结合体

# 类有两种作用:属性引用和实例化

# 属性引用(类名.属性)
# >>> Garen.camp #引用类的数据属性,该属性与所有对象/实例共享
# 'Demacia'
# >>> Garen.attack #引用类的函数属性,该属性也共享
# <function Garen.attack at 0x101356510>
# >>> Garen.name='Garen' #增加属性
# >>> del Garen.name #删除属性

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

# 对象是关于类而实际存在的一个例子,即实例
#
# >>> g1=Garen('草丛伦') #类实例化得到g1这个实例,基于该实例我们讲解实例相关知识
# >>> type(g1) #查看g1的类型就是类Garen
# <class '__main__.Garen'>
# >>> isinstance(g1,Garen) #g1就是Garen的实例
# True


# 对象/实例本身只有数据属性,但是python的class机制会将类的函数绑定到对象上,称为对象的方法,或者叫绑定方法
# 对象的绑定方法的特别之处在于:obj.func()会把obj传给func的第一个参数。也就是自动传值功能

# 对象之间的交互
# class Garen:
#     camp='Demacia'
#     def __init__(self,name,aggressivity=100,life_value=200):
#         self.name=name
#         self.aggressivity=aggressivity
#         self.life_value=life_value
#     def attack(self,enemy):
#         enemy.life_value-=self.aggressivity
# class Riven:
#     camp="Noxus"
#     def __init__(self,name,aggressivity=100,life_value=300):
#         self.name=name
#         self.aggressivity=aggressivity
#         self.life_value=life_value
#     def attack(self,enemy):
#         enemy.life_value-=self.aggressivity
# g1=Garen('z')
# r1=Riven('x')
# print(r1.life_value)
# g1.attack(r1)
# print(r1.life_value)


# 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性
# 而类有两种属性:数据属性和函数属性
# 其中类的数据属性是共享给所有对象的

# 创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性
原文地址:https://www.cnblogs.com/z-x-y/p/7096988.html