0 类与对象
基础介绍
- 类属性
- 实例属性
class Car: number=4 # 乘坐人数 def __init__(self,name): self.name=name car1=Car('audi rs4') print(car1.name) print(car1.number) Car.number=7 # 对类属性进行修改 print(car1.number) >>>audi rs4 >>>4 >>>7
- 实例方法
def eat(self): print('学生在吃饭...')
- 静态方法
@staticmethod def sm(): #没有self print('静态方法') # 调用 类名.method()
- 类方法
@classmethod def cm(cls): # 传入cls print('类方法') # 调用 类名.method()
- 实例属性
def __init___(self,name): self.name=name #self.name称为实例属性
对象创建
- 实例方法实现的两种方式
#对象名.方法名() #类名.方法名(对象名) class Car: number=4 # 乘坐人数 def __init__(self,name): self.name=name def show(self): #要调用实例属性,记得传入self print('汽车型号为'+self.name) car1=Car('audi rs4') car1.show() Car.show(car1) >>>汽车型号为audi rs4 >>>汽车型号为audi rs4
- 类属性的使用方式
动态绑定属性和动态绑定方法
# 动态绑定方法 class Car: number=4 # 乘坐人数 def __init__(self,name): self.name=name def show(self): print('汽车型号为'+self.name) def wash(): print('清洗已完成') car1=Car('audi rs4') car1.wash=wash car1.wash() >>>清洗已完成
1 面向对象的思想
三大特征分别具有什么作用
1.1 封装
作用:提高程序的安全性
- 属性和方法封装到类对象中
- 私有属性的介绍
1.2 继承
- 继承的demo
class Person(object): def __init__(self,name,age): self.name=name self.age=age def info(self): print('姓名:{0},年龄:{1}'.format(self.name,self.age)) class Student(Person): def __init__(self,name,age,sex): super().__init__(name,age) self.sex=sex stu=Student('wang',12,'male') stu.info() >>> 姓名:wang,年龄:12
super之后有()
- 多继承demo
- 方法重写
子类对继承自父类的某个属性或方法可以重新编写,编写时也可以通过super()调用。
class Person(object): def __init__(self,name,age): self.name=name self.age=age def info(self): print('姓名:{0},年龄:{1}'.format(self.name,self.age)) class Student(Person): def __init__(self,name,age,sex): super().__init__(name,age) self.sex=sex def info(self): super().info() print('性别:{0}'.format(self.sex)) stu=Student('wang',12,'male') stu.info()
- object类
1.3 多态
多态、多态性、鸭子类型
- 多态性:一个接口多种实现
python中对多态的理解 - 宇文哲的文章 - 知乎 https://zhuanlan.zhihu.com/p/88402677
- 鸭子类型:
这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
class Duck(): def walk(self): print('I walk like a duck') def swim(self): print('i swim like a duck') class Person(): def walk(self): print('this one walk like a duck') def swim(self): print('this man swim like a duck')
可以很明显的看出,Person类拥有跟Duck类一样的方法,当有一个函数调用Duck类,并利用到了两个方法walk()和swim()。我们传入Person类也一样可以运行,函数并不会检查对象的类型是不是Duck,只要他拥有walk()和swim()方法,就可以正确的被调用。
5 一些小知识点
5.1 方法与函数的区别
- 与类和实例无绑定关系的function都属于函数(function)
- 与类和实例有绑定关系的function都属于方法(method)