您的位置:首页 > 其它

类和对象:给大家介绍对象

2017-08-30 16:45 197 查看


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)属性设置属性


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: