对象=属性+方法。通常将对象划分为两部分:静态部分和动态部分。静态部分被称为“属性”,这些属性不仅是不能被忽视的而且是不能被忽视的,如人的性别;动态部分指的是对象的行为,如人可以行走。
类是封装对象的属性和行为的载体。在python语言中,类是一种抽象概念,如定义一个大雁类,在该类中,可以定义每个对象共有的属性和方法;而一只要从北方飞往南方的大雁则是大雁类的一个对象,对象是类的实例。
注:
__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("太撑了吃不下")注:
一个类被认为是其自身的子类;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)