一个对象的特征称为"属性",在代码层面来看就是变量;一个对象的行为称为"方法",实际就是函数,通过调用这些函数来完成某些工作。
需要使用类来创建一个真正的对象,这个对象就称为这个类的一个实例,也叫实例对象。类名约定用大写。
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("有得吃,真满足") def sleep(self): print("困了,睡了,晚安") tt=Turtle() tt.sleep()
默认对象的属性和方法都是公开的,可以直接通过点操作符(.)进行访问。在Python中定义私有变量只需要在变量名或函数名前加上"__"两个下划线,函数就会变成私有。(只是一种名字改编技术)
class Person: name = "小甲鱼" p = Person() print(p.name) "小甲鱼"
class Person: def __init__(self,name): self.__name = name def getName(self): return self.__name p = Person("小甲鱼") print(p._Person__name) "小甲鱼"
被继承的类称为基类、父类或超类;继承者称为子类,一个子类可以继承它的父类的任何属性和方法。
class Parent: def hello(self): print("正在调用父类的方法") class Child (Parent): pass p=Parent() p.hello() 正在调用父类的方法 c=Child() c.hello() 正在调用父类的方法
3.1 调用未绑定的父类方法
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) self.hungry = True def eat(self): if self.hungry: print("吃货的梦想就是天天有得吃") self.hungry = False else: print("太撑了,吃不下了")
3.2 使用super函数
super函数的”超级"之处在于:不需要明确给出任何基类的名字,它会自动找出所有基类以及对应的方法。
#将3.1的代码进行如下修改 class Shark(Fish): def __init__(self): super().__init__() self.hungry = True
(补充:通常把__init__()方法称为构造方法,init()方法的魔力体现在只要实例化一个对象,这个方法就会在对象被构造时自动调用。)
3.3多重继承
多重继承是指同时继承多个父类的属性和方法。
class Base1: def fool(self): print("我是fool,我在Base1中") class Base2: def foo2(self): print("我是foo2,我在Base2中") class C(Base1,Base2): pass c=C() c.fool() 我是fool,我在Base1中 c.foo2() 我是foo2,我在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(y) def print_num(self): print("水池里总共有乌龟%d只,小鱼%d条"%(self.turtle.num,self.fish.num)) #先运行代码 pool =Pool(1,10) pool.print_num() 水池里总共有乌龟1只,小鱼10条
class C: count = 0 a = C() b = C() c = C() print(a.count,b.count,c.count) 0 0 0 c.count +=10 print(a.count,b.count,c.count) 0 0 10 C.count +=100 print(a.count,b.count,c.count) 100 100 10
class BB: def printBB(): print("no zuo no die") class CC: def setXY(self,x,y): self.x=x self.y=y def printXY(self): print(self.x,self.y) dd=CC() print(dd.__dict__) print(CC.__dict__) dd.setXY(4,5) print(dd.__dict__) print(CC.__dict__) del CC dd.printXY()
7.1issubclass(class,classinfo)
如果第一个参数(class)是第二个参数(classinfo)的一个子类,则返回True,否则返回False。
1)一个类被认为是其自身的子类。
2)classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回True。
3)在其他情况下,会抛出一个TypeError异常。
class A: pass class B(A): pass issubclass(B,A) True issubclass(B,B) True issubclass(B,object) True class C: pass issubclass(B,C) False
7.2isinstance(object,classinfo)
如果第一个参数(object)是第二个参数(classinfo)的实例对象,则返回True,否则返回False。
1)如果object是classinfo的子类的一个实例,也符合条件。
2)如果第一个参数不是对象,则永远返回False。
3)classinfo可以是类对象组成的元组,只要object是其中任何一个候选类的子类,则返回True。
4)如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常。
issubclass(B,C) False b1 =B() isinstance(b1,B) True isinstance(b1,C) False isinstance(b1,A) True isinstance(b1,(A,B,C)) True
上周进行了第一次小组考核,成绩十分不理想,我要深刻反省自己。在考核时,每道题看着都眼熟,但到了自己上手的时候都不会做,这是因为基础知识并没有掌握。我觉得主要是因为我没有找到适合自己的学习方法,并且因为班级事务老是请假,最重要的是在小组为数不长的学习时间里学习效率还很低。前两周代码只是照着书敲了敲,遇到不会做的练习题也只是上网搜一下答案,然后”复制粘贴“,但对于里面所用到的方法和知识,自己只是一知半解,没有深入研究。还有很重要的一点是,缺乏和组员的沟通交流。在沟通交流的过程中,双方都能得到提升,何乐而不为呢?
在接下来的学习中,要制定一个合理的计划。可以先看一遍书,再看一遍视频,在理解知识的基础上,尝试着自己敲代码。同时,在学习新知识的时候,也不能忘记复习以前的知识。在第一名分享学习经验时,他就说他把前面的知识看了三四遍。为什么同样的时间别人能学习三四遍,而我只能学习一遍呢,是因为学习效率低下。因此,我以后要提高在小组的学习效率,在小组尽量不玩手机,不做与学习无关的事情。学长布置的练习题,也要先自己认真思考,实在想不出来的时候再上网搜,也可以跟身边的组员探讨,说不定一句话就能让我有茅塞顿开的感觉。
总的来说,前一阶段不够努力,接下来要加倍努力才行。