类和对象
一.对象=属性+方法
一个对象的特征称为"属性",在代码层面来看就是变量;一个对象的行为称为"方法",实际就是函数,通过调用这些函数来完成某些工作。 需要使用类来创建一个真正的对象,这个对象就称为这个类的一个实例,也叫实例对象。类名约定用大写。
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函数的”超级"之处在于:不需要明确给出任何基类的名字,它会自动找出所有基类以及对应的方法。
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()
七.与类和对象相关的一些常用BIF(内置函数)
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
上一阶段考核分析
上周进行了第一次小组考核,成绩十分不理想,我要深刻反省自己。在考核时,每道题看着都眼熟,但到了自己上手的时候都不会做,这是因为基础知识并没有掌握。我觉得主要是因为我没有找到适合自己的学习方法,并且因为班级事务老是请假,最重要的是在小组为数不长的学习时间里学习效率还很低。前两周代码只是照着书敲了敲,遇到不会做的练习题也只是上网搜一下答案,然后”复制粘贴“,但对于里面所用到的方法和知识,自己只是一知半解,没有深入研究。还有很重要的一点是,缺乏和组员的沟通交流。在沟通交流的过程中,双方都能得到提升,何乐而不为呢? 在接下来的学习中,要制定一个合理的计划。可以先看一遍书,再看一遍视频,在理解知识的基础上,尝试着自己敲代码。同时,在学习新知识的时候,也不能忘记复习以前的知识。在第一名分享学习经验时,他就说他把前面的知识看了三四遍。为什么同样的时间别人能学习三四遍,而我只能学习一遍呢,是因为学习效率低下。因此,我以后要提高在小组的学习效率,在小组尽量不玩手机,不做与学习无关的事情。学长布置的练习题,也要先自己认真思考,实在想不出来的时候再上网搜,也可以跟身边的组员探讨,说不定一句话就能让我有茅塞顿开的感觉。 总的来说,前一阶段不够努力,接下来要加倍努力才行。
|