Python学习--Task10:类和对象

mac2026-10-03  2

一、概念

1. 对象

对象=属性+方法。通常将对象划分为两部分:静态部分和动态部分。静态部分被称为“属性”,这些属性不仅是不能被忽视的而且是不能被忽视的,如人的性别;动态部分指的是对象的行为,如人可以行走。

2. 类

类是封装对象的属性和行为的载体。在python语言中,类是一种抽象概念,如定义一个大雁类,在该类中,可以定义每个对象共有的属性和方法;而一只要从北方飞往南方的大雁则是大雁类的一个对象,对象是类的实例。

3. 面向对象程序设计的特点

封装 将对象的属性和行为封装起来,而将对象属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节。例如,用户使用计算机,只需要使用手指敲击键盘就可以实现一些功能,而无需知道计算机内部是如何工作的。继承 继承是实现重复利用的重要手段,子类通过继承复用了父类的属性和行为的同时,又添加了子类特有的属性和行为。如四边形(父类)和平行四边形(子类)。多态 不同对象对于同一方法响应不同行动。一个父类衍生出不同的子类,子类继承父类特征的同时,也具备了自己的特征,并且能够实现不同的效果,这就是多态化结构。

二、面向对象编程

self >>>class Ball:#类 def setName(self,name):#方法1 self.name=name def kick(self):#方法2 print("我叫%s"% self.name) >>> a=Ball() >>> a.setName("球A") >>> b=Ball() >>> b.setName("球B") >>> c=Ball() >>> c.setName("球C") >>> a.kick() 我叫球A >>> b.kick() 我叫球B _init_(self)方法 >>> class Ball: def __init__(self,name): self.name=name def kick(self): print("我叫%s"%self.name) >>> b=Ball("球B") #用__init__()方法此处要加参数 >>> b.kick() 我叫球B class Geese: '''大雁类''' def __init__(self,beak,wing,claw): print("我是大雁类!我有以下特征:") print(beak) print(wing) print(claw) beak_1="喙的基部较高,长度和头部的长度几乎相等" wing_1="翅膀长而尖" claw_1="爪子是蹼状的" wildGoose=Geese(beak_1,wing_1,claw_1)

注:

__init__()为双下划线;__init__()方法必须包含一个self参数,还可以自定义一些参数,参数间用逗号进行分隔。 公有私有 在python中定义私有变量只需在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会变成私有的了。 >>> class Person: name="NCEPU" >>> p=Person() >>> p.name 'NCEPU' >>> class Person: __name="NCEPU" def getName(self): return self.__name >>> p=Person() >>> p.getName()

三、继承

一般格式:

class DerivedClassName(BaseClassName): ... #class 类名(父类名):

实例:

class Parent: def hello(self): print("正在调用父类的方法...") class Child(Parent): pass p=Parent() c=Child() p.hello() c.hello() #输出: 正在调用父类的方法... 正在调用父类的方法...

如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性:

class Parent: def hello(self): print("正在调用父类的方法...") class Child(Parent): def hello(self): print("正在调用子类的方法...") p=Parent() c=Child() p.hello() c.hello() #输出: 正在调用父类的方法... 正在调用子类的方法...

解决方法:

调用未绑定的父类方法;使用super()函数。 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): #方法一:调用未绑定的父类方法 #Fish.__init__(self) #方法二:使用super()函数 super().__init__() self.hungry = True def eat(self): if self.hungry: print("吃") self.hungry=False else: print("太撑了吃不下")

多重继承

class DerivedClassName(Base1,Base2...) ...

组合

class Turtle: def __init__(self,x): self.name=x class Fish: def __init__(self,x): self.name=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))

相关的BIF

issubclass(class,classinfo): 检查类是否是另一类的子类 ,若class是classinfo的子类,返回True。

注:

一个类被认为是其自身的子类;classinfo可以是类对象组成的元组,只要class与其中任何一个候选类的子类,则返回True。 isinstance(object,classinfo):检查某实例对象是否属于某类。 注: 如果第一个参数不是对象,则永远返回False。如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError的异常。 class A: pass class B(A): pass class C: pass b1=B() print(issubclass(B,A)) print(issubclass(B,B)) print(isinstance(b1,B)) print(isinstance(b1,(A,B,C)))#均为True hasattr(object,name):测试一个对象是否有指定的属性 class C: def __init__(self,x=0): self.x=x c1=C() print(hasattr(c1,'x'))#要用字符串的形式 getattr(object,name[,default]):返回参数的属性值 如没找到对应的属性值,则会返回default,default内容可以设置。setattr(object,name,value):设置对象中指定属性的值,若指定属性不存在,会新建一个。delattr(object,name):删除对象中指定的属性,若属性不存在就会抛出AttributeError异常。property(fget=None,fset=None,fdel=None,doc=None):通过属性设置属性。 class C: 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) c1=C() print(c1.getSize()) print(c1.x) c1.x=18 print(c1.x)
最新回复(0)