DAY13+14.类与对象

mac2026-01-17  4

No.9类与对象 对象=属性(静态)+方法(动态) 属性实际上就是变量,方法实际上就是函数 1、面向对象的特征 1)封装 2)继承:是子类自动共享父类之间数据和方法的机制 3)多态 2、self(相当于c++中的this指针) e.g.>>>class Ball: def setName(self,name): self.name=name def kick(self): print(“我叫%s,谁踢我”%self.name) >>>a=Ball() >>>a.setName(‘球A’) >>>a.kick() 我叫球A,谁踢我 3、init方法(构造方法) 语法:init(self,param1,param2…) e.g.>>>class Ball: def init(self,name): self.name=name def kick(self): print(“我叫%s,谁踢我”%self.name) >>>b=Ball(‘土豆’) >>>b.kick() 我叫土豆,谁踢我 4、公有和私有 e.g.>>>class Person: _name=“小机灵” def getName(self): return self._name >>>p=Person() >>>p._name 出错 >>>p,getName() ‘小机灵’ >>>p._Person_name ‘小机灵’ 5、继承 被继承的类称为基类、父类或超类 继承的类称为子类 语法:class DerivedClassName(BaseClassName): e.g.>>>class Parent: def hello(self): print(‘正在调用父类的方法’) >>>class Child(Parent): pass >>>p=Parent() >>>p.hello() 正在调用父类的方法 >>>c=Child() >>>c.hello() 正在调用父类的方法 注:如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性 e.g. .>>>class Child(Parent): def hello(self): print(‘正在调用子类的方法’) >>>c=Child() >>>c.hello() 正在调用子类的方法 >>>p=Parent() >>>p.hello() 正在调用父类的方法 6、多重继承 同时继承多个父类的属性和方法 语法:class DerivedClassName(Base1,Base2,Base3): 7、组合 e.g.class Turtle: def init(self,x): self.num=x class Fish: 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条!

8、类、类对象和实例对象 若属性名字与方法名相同,属性会覆盖方法 注:1)不要试图在一个类里面定义出所有能想到的属性和方法,应该利用继承和组合机制进行扩展 2)用不同的词性命名,如属性名用名词,方法名用动词 e.g.>>>class C: def x(self): print(“X-man!”) >>>c=C() >>>c.x() X-man! >>>c.x=1 >>>c.x 1 >>>c.x() 出错 9、绑定 python严格要求方法需要有实例才能被调用 e.g.>>>class BB: def printBB(): print(“Hail Hydra!”) >>>BB.printBB() Hail Hydra! >>>bb=BB() >>>bb.printBB() 出错 10、与类和对象相关的一些内置函数 1)issubclass(class,classinfo) 若第一个参数class是第二个参数classinfo的子类,则返回True) 注:a.一个类也会被认为是自身的子类 b.classinfo可以是类对象组成的元素,只要class与其中任何一个候选类的子类,则返回True e.g.>>>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 2)isinstance(object,classinfo) 检查一个实类对象(object)是否属与这个类 注:a.如果第一个参数不是对象,则永远返回False b.如果第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常 e.g.>>>b1=B() >>>isinstance(b1,B) True >>>isinstance(b1,A) True >>>isinstance(b1,C) False >>>isinstance(b1,(A,B,C)) True 3)hasattr(object,name) attr=attribute属性 测试一个对象是否有指定的属性 e.g.>>>class C: def init(self,x=0): self.x=x >>>c1=C() >>>hasattr(c1,‘x’) True >>>hasattr(c1,x) 出错 4)getattr(object,name[,default]) 返回对象指定的属性值,如果指定的属性不存在,(如果自己设置了default)它会把default参数打印出来,否则会抛出AttributeError的异常 e.g.>>>getattr(c1,‘x’) 0 >>>getattr(c1,‘y’) 出错 >>>getattr(c1,‘y’,“您所访问的属性不存在”) 您所访问的属性不存在 5)setattr(object,name,value) 可以设置对象中指定属性的值,如果指定属性不存在,则会新建一个属性,并给这个属性赋值 e.g.>>>setattr(c1,y,‘tune’) >>>setattr(c1,‘y’,“您所访问的属性不存在”) tune 6)delattr(object,name) 删除对象中指定的属性,若属性不存在,则抛出AttributeError的异常 e.g.>>>delattr(c1,‘y’) >>>delattr(c1,‘y’) 出错 7)property(fget=None,fset=None,fdel=None,doc=None) 通过属性来设置属性 e.g.

最新回复(0)