- 对象 = 属性 + 方法
- 封装:信息隐蔽技术
- 继承:子类自动共享父类之间数据和方法的机制
- 多态:不同对象对同一方法响应不同的行动
- self
- 类的方法第一个参数为self
- 实例化的时候可以传递参数
- 通过重写__init__()添加参数
- __init__(self, param1, param2)
- 定义私有变量在变量名或函数名前加上__两个下划线,外部无法访问
- 名称改编为_类名__变量名
class Person:
__name = "A"
Def getName(self):
return self.__name
p = Person()
p.__name 无法调用
p.getName()
p._Person__name
- 继承
- class DerivedClassName(BaseClassName):
- 子类
- 基类、父类、超类
- 如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性
- 调用未绑定的父类方法
- Fish.__init__(self)
- 使用super函数
- super().__init__()
- 多重继承
- 组合
class Turtle:
def __init__(self, x):
self.num = x
class Fish:
def __init__(self, y)
class Pool:
def __init__(self, x, y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print("水池里有乌龟 %d 只,鱼 %d 条。" % (self.turtle.num, self.fish.num)
- 属性名与方法名相同,属性会覆盖方法,重新初始化
- 不要试图在一个类里定义出所有能想到的特性和方法,应该利用继承和组合机制来扩展
- 用不同的词性命名,如属性名用名词,方法名用动词
- 绑定,严格要求方法需要有实例才能被调用
- issubclass(class, classinfo) class为classinfo的子类,返回true
- 一个类被认为是其自身的子类
- classinfo可以是类对象组成的元组,只要其中任一个满足则true
- object是所有类的一个基类
- isinstance(object, classinfo)检测实例对象是否属于类
- 如果第一个参数不是对象,则永远返回false
- 如果第二个参数不是类或类对象组成的元组,则TypeError异常
- hasattr(object, name)一个对象里是否有指定的属性,字符串表示属性
- getattr(object, name[, default])返回属性值,不存在返回默认值
- setattr(object, name, value)赋予属性值,不存在即新建
- delattr(object, name)删除属性
- property(fget=None, fset=None, fdel=None, doc=None)
class C:
def __init__(self, size = 10):
self.size = size
def getSize(self):
return self.size
def setSize(self, value):
self.size = value
def delSize(self):
del self.size
x = property(getSize, setSize, delSize)
c = C()
c.x
c.x = 18
del c.x