标签:加载 pass rom 组合 type add types 父类 属性
面向对象的三大特征
封装 : 把固定功能的代码封装到一个代码块,函数,对象,打包成模块
继承 : 子类可以自动拥有父类中除了私有属性外的其他所有内容
多态 : 同一个对象,多种形态
类的成员
变量 :
1.实例变量(字段) : 给对象用的
2.类变量(静态变量) : 多个对象共享的.最好是用类名来访问
方法 :
1.成员方法(实例方法) : 对象直接访问的方法叫成员方法
2.静态方法 : 不需要给方法传递self
@staticmethod def func(): pass
3.类方法 : 类方法被调用时也不需要传递实例对象
@classmethod def func1(cls, a, b): pass
属性:
class Person: def __init__(self, name, gender, birth): self.name = name self.gender = gender self.birth = birth # 2000 2018 # 年龄 -> 应该是算出来的. 而不是直接存储 @property # 把一个方法更改成一个属性, 每次拿属性的时候都会自动的去执行这个方法 # 方法的返回值就是属性值 def age(self): # 实例方法 print("我是方法") return 2018 - self.birth
1. 方法参数只能有一个self
2. 方法上方要写@property
3. 调用的时候,不需要写括号.直接当成属性变量来用就可以了
私有:
使用__作为前缀,那么这个方法或者变量就是一个私有的
私有变量 : self.__age = age
私有方法 : def __age(self): pass
类与类之间的关系:
1. 依赖关系
2. 关联关系
3. 组合关系
4. 聚合关系
5. 继承关系 : self就是你访问方法的那个对象,先找自己,再找父类
6. 实现关系
类中的特殊成员
1. 类名()会自动执行__init__()
2. 对象()会自动执行__call__()
3. 对象[key]会自动执行__getitem__()
4. 对象[key] = value 会自动执行__setitem__()
5. del 对象[key]会自动执行__delitem__()
6. 对象+对象会自动执行__add__()
7. with对象as变量会自动执行__enter__和__exit__
8. 打印对象的时候会自动执行__str__
9. 去掉hash __hash__ == None 对象就不可哈希了
创建对象的步骤 : 加载类 → 开辟内存(__new__) → 初始化(__init__) → 使用对象调用方法
isinstance, type, issubclass函数
issubclass(Bar, Foo) 这个内置函数判断xx类是否是xxx类型的子类
type(obj) 查看obj是由哪个类创建的
isinstance(Foo(), Foo) 判断xxx是xx类型的数据,没有type精准,只能往上判断,是否是XX家族体系中的
函数和方法
1. 类方法.不论任何情况,都是方法
2. 静态方法,不论任何情况.都是函数
3. 实例方法,如果是实例访问.就是方法.如果是类名访问就是函数
types模块
from types import MethodType, FunctionType def func(): pass print(isinstance(func, FunctionType)) # True print(isinstance(func, MethodType)) # False
标签:加载 pass rom 组合 type add types 父类 属性
原文地址:https://www.cnblogs.com/gracenana/p/10209763.html