昨天晚上做小组作业断了一天,还错过了度厂的在线笔试
由于装不上easygui,先不学图形界面,今天学习类和对象
#一个对象的特征成为“属性”,一个对象的行为称为“方法”
class Turtle:
color = "green"
weight = 10
legs = 4
shell = True
mouth = "大嘴"
def climb(self):
print("我在努力的爬啊爬")
def run(self):
print("我在跑")
def bite(self):
print("咬死你")
def eat(self):
print("真好吃")
>>> tt = Turtle()
>>> tt.climb()
我在努力的爬啊爬
>>> class A:
def fun(self):
print("我是A")
>>> class B:
def fun(self):
print("我是B")
>>> a = A()
>>> b = B()
>>> a.fun()
我是A
>>> b.fun()
我是B
self是什么?
>>> class Ball:
def setname(self,name):
self.name=name
def kick(self):
print("我叫%s,该死的,谁踢我..."% self.name)
>>> a = Ball()
>>> a.setname("小甲鱼")
>>> a.kick()
我叫小甲鱼,该死的,谁踢我...
>>> b = Ball()
>>> b.setname("小乌龟")
>>> b.kick()
我叫小乌龟,该死的,谁踢我...
self就是指针
Python 的魔法方法(总是被双下划线所包围)
>>> class Ball:
def __init__(self,name):
self.name=name
def kick(self):
print("我叫%s,谁踢我"% self.name)
>>> p = Ball("土豆")
>>> p.kick()
我叫土豆,谁踢我
公有和私有
公有:
>>> class Person:
name = "小甲鱼">>> p = Person()
>>> p.name
'小甲鱼'
私有:
>>> class Person:
__name = "小甲鱼">>> p = Person()
>>> p.name
Traceback (most recent call last):
File "<pyshell#66>", line 1, in <module>
p.name
AttributeError: 'Person' object has no attribute 'name'
可以通过定义内部函数,然后调用内部函数来得到
>>> class Person:
__name = "小甲鱼"def getname(self):
return self.__name
>>> p.getname()
'小甲鱼'
还可以直接得到 _类名__变量名
>>> p._Person__name
'小甲鱼'
继承
class 类名(被继承的类):
>>> class A:
def hello(sef):
print("你好")
>>> class B(A):
pass
>>> p = A()
>>> p.hello()
你好
>>> q = B()
>>> q.hello()
你好
如果子类中定义与父类同名的方法和属性,则会自动覆盖父亲对应的方法或属性
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 Fish1(Fish):
pass
class Fish2(Fish):
pass
class Fish3(Fish):
pass
class Shark(Fish):
def __init__(self): 因为self函数在父类里已经用过,这里用会覆盖父类里面定义的参数
super().__init__() super函数,自动找到基类
self.hungry = Truedef eat(self):
if self.hungry:
print("吃货的梦想就是天天有的吃")
else:
print("太撑了,吃不下了")
多重继承
>>> class Base1:
def fun1(self):
print("我是fun1,我在Base1中")
>>> class Base2:
def fun2(self):
print("我是fun2,我在Base2中")
>>> class C(Base1,Base2):
pass
>>> c = C()
>>> c.fun1()
我是fun1,我在Base1中
>>> c.fun2()
我是fun2,我在Base2中
组合:
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(x)
def print_num(self):
print("水池里总共有%d只乌龟,%d条小鱼" % (self.Turtle.num,self.Fish.num))
最后的绑定没看太懂