class person:
#属性
age = 20
name = "guojawee"
#方法
def show(self): #函数的第一个参数必须是self
print("年龄 = %d" %self.age) #属性前必须加self
print("名字 = %s" %self.name)
p = person() #定义一个对象
p.show()
注解:self相当于C++中的this指针
----------------------------------------------
对象 = 属性+方法
封装
继承
多态:不同对象对同一方法,响应不同的行动
----------------------------------------------
name mangling 名字改变,名字重整
在Python中定义私有变量只需要在变量名或函数名前加上两个下划线__,
那么变量或函数就会成为私有的了。
__变量名 改编成 _类名__变量名
继承
class 子类(父类):
... ...
调用未绑定的方法
使用super
游戏:鲨鱼吃鱼
小鱼:金鱼Goldfish,鲤鱼Carp,三文鱼Salmon,
鲨鱼:Shark
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):
#fish.__init__(self) #fish.__init__(Shark) #非绑定的继承
super().__init__() #绑定的继承
self.hungry = True
def eat(self):
if self.hungry:
print("我饿了,我要吃东西...")
else:
print("撑死了,吃不下了...")
组合
一个水池类,里边有乌龟和各种鱼
class Turtle:
def __init__(self,x):
self.num = x
class Fish:
def __init__(self,y):
self.num = y
class pool:
def __init__(self,num1,num2): #利用组合
self.Turtle = Turtle(num1)
self.Fish = Fish(num2)
def print_num(self):
print("水池中,有乌龟%d只,鱼%d条" %(self.Turtle.num,self.Fish.num))
p = pool(1,2)
p.print_num() #水池中,有乌龟1只,鱼2条
[说明]组合的使用规则:
假设B类想组合A类,那么在B类的构造函数中,直接实例化A类的对象即可。
绑 定
Python严格要求方法需要有实力才能被调用,这种限制其实
就是Python所谓的绑定。
一些相关的BIF
issubclass(class,classinfo)
isinstance(object,classinfo)
hasattr(object,name) 测试一个对象object中是否有name属性
getattr(object,name[,default]) 获得对象object指定属性name的值
setattr(object,name,value) 没有就新建一个属性name,并设值为value
delattr(object,name)
property(fget=None,fset=None,fdel=None,doc=None)属性设置属性