类和对象
1.对象=属性+方法
2.类名用大写字母开头,函数用小写字母开头
3.OO的特征
OO=Object Oriented面向对象
- 封装-信息隐蔽技术
- 继承-子类自动共享父类之间数据和方法的机制
>>> list2=MyList()
>>> list2.append (5)
>>> list2.append (2)
>>> list2.append(7)
>>> list2.sort()
>>> list2
[2, 5, 7]
- 多态-不同对象对同一方法有不同的响应
4.self是什么
类似于c++中的指针,如果说类是设计图纸,那么实例对象就是具体的房子,而self相当于门牌号
>>> class Ball:
def setname(self,name):
self.name=name
def kick(self):
print('我叫%s,该死的,谁踢我...'% self.name)
>>> a=Ball()
>>> a.setname('球A')
>>> b=Ball()
>>> b.setname('球B')
>>> c=Ball()
>>> c.setname('球C')
>>> a.kick()
我叫球A,该死的,谁踢我...
>>> c.kick()
我叫球C,该死的,谁踢我...
5.魔法方法 init(self)
出现实例对象的时候,会自动调用此函数,进行初始化,称之为构造函数,当然,此函数也可传输一些参数
6.公有和私有
对象的属性和方法都是公有的
7.继承class DerivedClassName(BaseClassName):
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 ('太撑了,吃不下了')
>>> shark=Shark()
>>> shark.eat()
吃货的梦想就是天天有的吃
>>> shark.eat()
太撑了,吃不下了
>>> shark.eat()
太撑了,吃不下了
>>> shark.move()
我的位置是: -1 9
>>> shark.move()
我的位置是: -2 9
多重继承:class DerivedClassName(Base1,Base2,Base3):
8.组合:把类的实例化这一步骤放到一个新类里面,就将旧类与新类组合在一起
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))
9.绑定:Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。
10.issubclass(class,classinfo)
- 一个类被认为是其自身的子类
- classinfo可以是类对象组成的元祖,只要class与其中任何一个候选类的子类,则返回true
11.isinstance(object,classinfo) - 如果第一个参数不是对象,则永远返回false
- 如果第二个不是类或者由类对象组成的元祖,会抛出一个TypeError异常
12.hasattr(object,name)
测定一个对象里面是否有指定的属性
getattr 得到属性值
setattr 设定一个属性
delsttr 删除一个属性