面向对象编程的表现形式:
1.导入库
2.设计各种全局变量
3.决定需要类
4.给每个类提供完整的一组操作
5.明确地使用继承来表现不同类之间的共同点
6.可选择是否需要main函数作为入口
对象 = 属性+方法
类:用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象多共有的属性和方法。其中的对象被称为类的实例。
#Python中类名约定以大写字母开头
对象:也叫实例。通过类定义的初始化方法,赋予具体的值。
实例化:创建类的实例的过程或操作。
实例变量:定义在实例中的变量,只用于当前实例。
方法:类中定义的函数。
便于理解的例子:飞机制造
类——飞机制造图纸
对象——飞机
方法——零件
定义类:
class 类名(父类列表):
属性列表
方法列表
创建对象:
对象名 = 类名()
同一个类可以生成无数个对象,self函数指的是类实例对象本身.()
在类中定义函数,第一参数永远是类的本身实例变量self
init方法:
1.初始化对象
2.参数值可以有多种形式
封装、继承、多态
封装:对数据,方法的封存
多态:对同一个方法,会根据对象的类型不同以不同的方式处理
继承:
被继承的类称为基类、父类或超类;
继承者称为子类,一个子类可以继承它的父类的任何属性和方法。
语法:
class 类名(被继承的类):
…
多重继承:有多个父类时以从左往右的顺序寻找方法,找到后不再继续寻找。(尽量避免使用)
super函数:可以自动找出所有基类及对应方法。
使用:
import random as r
class Fish:
def __init__(self):
self.x = r.randint(0, 10)
self.y = r.randint(0, 10)
def move(self):
self.x -=1
print("我的位置是:", self.x, self.y)
class Goldfish(Fish):
pass
class Carp(Fish):
pass
class Salmon(Fish):
pass
class Shark(Fish):
def __init__(self):
super().__init__()
self.hungry = True
def eat(self):
if self.hungry:
print("吃货的梦想就是天天有的吃")
self.hungry = False
else:
print("太撑了,吃不下")
fish = Fish()
fish.move()
goldfish = Goldfish()
goldfish.move()
shark = Shark()
shark.eat()
shark.eat()
shark.move()
组合:
也能实现一个类拥有另一个类的方法和属性。
组合中是拥有关系。如鱼类和乌龟类被水池类拥有。
如:
class Turtle:
def __init__(self, x):
self.num = x
class Fish:
def __init__(self, x):
self.num = x
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))
pool = Pool(1, 10)
pool.print_num()
驼峰命名法:
小驼峰命名法:第一个单词以小写字母开始;第二个单词的首字母大写,例如myName,aDog
大驼峰命名法:每一个单词的首字母都采用大写字母,例如:FirstName,LastName
类的定义要“少吃多餐”,合理利用继承和组合机制扩展类。
如果属性的名字和方法名相同,属性会覆盖方法
绑定
Python 严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。
class BB:
def printBB():
print("no zuo no die")
'''BB.printBB()'''
bb = BB()
bb.printBB()
由于绑定机制,会导致TypeError
一些BIF
1.issubclass(class,classinfo)
#如果第一个参数是第二个参数的一个子类,则返回True,否则返回False
2.isinstance(object,classinfo)
#如果第一个参数是第二个参数实例对象,则返回True,否则返回False
3.hasattr(object,name)
#如果第一个参数是对象,第二个是属性名,则返回True,否则返回False
4.getattr(object,name[,default])
#返回对象指定的属性值,若不存在,则返回default的值
5.setattr(object,name,value)
#可以设置对象中指定属性的值,若不存在,则新建并赋值
6.delattr(object,name)
#删除对象中指定的属性