4.Python中的类

    科技2024-04-06  79

    1. 类与实例

    #类的定义 class Person(object): """定义一个Person类 Person类具有的属性:性别 Person类具有的功能:说话 """ sex='female' #类属性 def __init__(self,name): """构造方法:在创建类实例时,初始化""" self.name=name #实例属性 self.__age=100 #私有属性 def hello(self,language): """自定义方法""" result={'name':self.name,'sex':self.sex,'language':language} return result def get_age(self): return self.__age #类的使用 #创建实例对象,传入构造方法中规定的参数 p1=Person('sandy') print('p1: ',p1) #调用类中的自定义方法 print(p1.hello('普通话')) #通过类方法访问类中的私有属性 print(p1.get_age()) #调用类的属性 print('p1.sex: ',p1.sex) #调用实例的属性 print('p1.name: ',p1.name)

    运行结果是:

    通过关键字class来声明类,class后面跟着类名,类名后面的括号里面跟着该类的父类类中的方法,第一个参数固定是self,它表示实例对象本身,通过self.XXX可以调用实例对象所拥有的的属性和方法通过类名(初始化参数)实例化一个对象,该初始化参数传给类中的构造方法__init__

    2. 属性

    类属性

    在声明类后,就存在于内存中,能够通过类来直接访问

    实例属性

    只有在实例化后才存在,不能直接通过类来访问,只能通过实例对象访问

    私有属性

    命名时以两个下划线开头,不能直接通过实例调用,一般通过类的方法来访问

    3. 方法

    类中的方法第一个参数都是变量self,self表示调用此方法的实例化对象,类中的方法需要实例化后才能调用; 但静态方法和类方法可以通过类直接调用

    静态方法@staticmethod

    与类相关但又不需要改变类和实例状态的方法,这类方法可以声明为静态方法静态方法不需要访问类里的任何参数,所带的参数都是从外部传入的静态方法使用函数修饰符@staticmethod声明

    类方法@classmethod

    类方法使用函数修饰符@classmethod声明类方法的第一个参数是表示自身类的cls参数,可以用来调用类的属性,类的方法 #类的定义 class Person(object): """定义一个Person类 Person类具有的属性:性别 Person类具有的功能:说话 """ sex='female' def __init__(self,name): """构造方法:在创建类实例时,初始化""" self.name=name #实例属性 def hello(self,language): """自定义方法""" result={'name':self.name,'sex':self.sex,'language':language} return language @staticmethod def sing(song): print('sing: ',song) @classmethod def run(cls,distance): print('run: ',distance,'sex: '+cls.sex) #调用方法 Person.sing("ABCDEFG") #类直接调用静态方法 Person.run('400') #类直接调用类方法 p=Person('Andy') p.sing('HIJKLMN...') #通过实例调用静态方法 p.run('7000') #通过实例调用类方法

    特殊方法

    new:作用在构造方法创建实例之前 init:构造方法,作用于创建实例之时 str:作用于输出实例对象时 del:作用于销毁实例对象时

    #类的定义 class Person(object): """定义一个Person类 """ def __init__(self,name): self.name=name print('__init__ function call') def __new__(cls, *args, **kwargs): print('__new__ function call') return super(Person,cls).__new__(cls) def __str__(self): print('__str__ function call') return self.name def __del__(self): print('__del__ function call') #调用方法 print('*'*30) p=Person('lin') print('*'*30) print(p) print('*'*30) del p

    运行结果是:

    4. 继承

    子类可以直接使用父类中定义的属性和方法子类的方法如果和父类的方法重名,子类会覆盖掉父类一般子类的构造方法都是先继承然后扩展,构造方法的继承格式是super(子类,self).__init__(参数1,参数2...) class Person(object): """定义父类Person""" sex='female' def __init__(self,name): """父类的构造方法""" self.name=name def hello(self): print('name: '+self.name) class Chinese(Person): """定义子类Chinese""" def __init__(self,name,color): """子类的构造方法:""" super(Chinese,self).__init__(name) #先继承父类的构造方法 self.color=color #扩展子类的构造方法 def hello(self): """复写子类中的方法""" print('I am Chinese,my name is【{name}】,my color is【{color}】'.format(name=self.name,color=self.color)) p1=Chinese('lin','yellow') #调用子类的构造方法 print(p1.sex) #子类调用父类的成员数据 p1.hello() #子类调用父类的方法

    运行结果是:

    Processed: 0.017, SQL: 8