一.对象的创建
python的创建对象a = A()
a是创建的对象,A是类名
python的继承class A(B):
A类继承B类
举个例子
c
class Ball:
def Name(self,name):
self.name = name
def kick(self):
print('我是%s,谁踢我?' % self.name)
a = Ball()
a.Name('球A')
b = Ball()
b.Name('好球')
这里的self
相当于c++的this
指针
这个self
是隐藏的
在kick
函数中,我们要使用name
这个属性,所以要添加self
当然这个代码还可以优化
使用一个__init__
函数就可以了
lass Ball:
def __init__(self,name):
self.name = name
def kick(self):
print('我是%s,谁踢我?' % self.name)
a = Ball('好球')
a.kick()
我们直接在创建的时候就给名字,比较方便
相当于c++的构造函数
如果这个不给参数的话就会报错
二.公有和私有
只用在函数或者变量前加两个下划线就可以了
class Person:
__name = 'yyr'
但是我们也可以用_类名__数据名
来访问
p._Person__name
三.继承
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 Shark(Fish):
def __init__(self):
self.hunger = True
def eat(self):
if self.hunger:
print('天天吃')
self.hunger = False
else:
print('吃不下了')
这个时候还都是对的
但是对shark
调用move
函数
因为Shark
中没有x
修改Shark
的init
函数可以用super
函数
def __init__(self):
super().__init__()
self.hunger = True
super可以自动检测基类,所以这个调用都不用传slef
的参数
四.多重继承
class Base1:
def foo1(self):
print('我是Base1')
class Base2:
def foo2(self):
print('我是Base2')
class Base3(Base1,Base2):
pass
五.组合类
class Turtle:
def __init__(self,num):
self.num = num
class Fish:
def __init__(self,num):
self.num = num
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))
这个代码中,将一个turtle
对象和一个fish
对象作为成员数据给了pool
self.turtle = Turtle(x)
self.fish = Fish(y)
六.内置函数
获得属性函数getattr(类对象,'属性名')
改值属性函数setattr(类对象,'属性名',更改值)
删除属性函数delattr(类对象,'属性名')
这里的属性名都是要用字符串形式
class A:
def __init__(self,x=0):
self.x = x
在使用setattr
的时候如果没有这属性,他会自己创造一个
由此我们可以引入一个新的函数property(get,set ,del)
有了这个函数我们可以不写函数名,就能对一个属性进行添加,更改,删除
class A:
def __init__(self,size = 10):
self.size = size
def getSize(self):
return self.size
def setSize(self,value):
self.size = value
def delSize(self):
del self.size
x = property(getSize,setSize,delSize)
语句a.x = 5
是set
函数
语句a.x
是get
函数
通过property
函数将size
和x
挂钩,删除size
,x
也被删除
七.析构函数
__del__(self)