python的面向对象
定义类
class 关键字
python
class 类名(父类):
属性1 = 值1
属性2 = 值2
方法1()
方法2()
方法3()
init构造函数
python
class 类名(父类):
def __init__(self, 参数列表):
self.属性 = 值
-
init第一个参数是self,代表当前对象
-
在init方法内部,可以把各种属性绑定到self上
-
在类中定义的方法,如果没有参数,则不需要写括号
访问限制
- 内部属性不被外部访问,可以把属性前加
__
继承
python
class 子类(父类):
python
class Animal(object):
def run(self):
print('Animal is running...')
class Dog(Animal):
def run(self):
print('Dog is running...')
class Cat(Animal):
def run(self):
print('Cat is running...')
def running_test():
animals = [Dog(), Cat()]
for animal in animals:
animal.run()
running_test()
获取对象信息
type()
判断对象类型types
使用types判断,对象是否为函数isinstance()
判断对象是否为某个类的实例dir()
获取对象所有属性hasattr()
判断对象是否具有某个属性getattr()
获取对象的某个属性setattr()
设置对象的某个属性
实例属性和类属性
- 实例属性:每个实例都有自己的属性值,不同对象的属性值可能是不一样的
- 类属性:就是静态属性,每个实例都可以访问,值都一样
python
class Animal(object):
静态属性 = 'Animal'
@property
装饰器
- 使用
@property
装饰器,可以把方法变成属性
python
@property
def score(self):
return self.__score
@score.setter
def score(self, value):
if not isinstance(value, int) or value < 0 or value > 100:
raise ValueError('bad score')
self.__score = value
多继承
在python中多重继承比较简单,只需要在定义类后面多加父类名字即可
python
class 子类(父类1, 父类2):
MixIn设计方法:通过增加继承类,对一个类增加多个功能
定制类
__str__
- 使用
__str__()
可以自定义打印输出的内容
__repr__()
- 返回程序开发者看到的字符串
__iter__()
- 如果一个类想被用于(for...in)遍历,就必须实现一个
__iter__()
__next__()
用于拿到下一个值
__getitem__()
- 使用
[]
访问对象时,会调用这个方法