一、类的对象、实例化、变量
1.概念:类就是class,将一类事物放到一起,类里面包含这类事物的各种函数方法,相当于一个模型,例如造汽车,造汽车就是一个类,类里面包含造轮胎,造车门等函数方法。类的实例化就是通过这个类,这个模型造出来的实际的东西,例如通过造汽车这个模型造出来了一个汽车,这个汽车就是这个类的一个实例。在类里面有类变量,写在类里面,函数外面,通常就是类变量,在函数里面类似于self.name 这种就是实例变量。类的对象在代码层指的就是self,在函数里都会默认有个参数为self,类里面的函数都是面向这个self对象,函数里面的self.name 这种变量也是的,所以在一个类的函数里面,各个函数可以直接调用类里的其他函数的self.name 这种变量,或是self.函数名这个函数。其实在实例化的时候就是将那个实例传递给这个类里面的self,所以这个实例会拥有这个类里面的所有属性,或是方法。
2.例子:
class Person: #类,类名都以大写字母开头,驼峰式取名 country = 'China' #类变量 def say(self): self.name = '张三' #实例变量 def cry(self): print('%s 哇哇哇'%self.name) #调用上一个函数里self.name self.say() #调用函数say()a=Person() #类的实例化a.cry() #实例化后,相当于类里面的self变成了aPerson.country #类变量可直接类.变量名 使用
二、实例方法、类方法、静态方法、属性方法
1.概念:
实例方法:正常定义的函数都是实例方法,函数后默认参数self
类方法(方法名上一行加装饰器@classmethod):
a.可以不实例化,直接用类名调用,类名.函数名(),也可以实例化,实例化后也可以直接通过实例名.函数名()来使用类方法
b.它可以使用类变量,cls.变量名
c.在实例方法里,可以使用self.函数名(),来使用类方法
d.在类方法里,它是不能用这些实例方法和实例变量,类似于self.xx这种
静态方法(方法名上一行加装饰器@staticmethod):
a.就是一个普通的函数,只是定义在类里面而已
b.用不了实例方法、用不了实例变量、也用不了类方法、类变量
c.也不需要实例化,直接类名.方法名()调用即可
属性方法(方法名上一行加装饰器@property):
a.看起来像变量的一个函数
b.是个实例方法
c. 它不能有入参
d.用它的时候,直接实例名.函数名,把它当做一个变量用就ok了,不需要加括号调用
e.它是获取函数的返回值,return的值
2.例子:
class My: country ='China'
def say(self): #实例方法 print('实例方法') self.eat() #调用类方法
@classmethod #类方法def eat(cls): #class,不是self print(cls.country) #使用类变量 print('类方法') cls.run() #调用静态方法
@staticmethod #静态方法def run(): print('静态方法')
@property #属性方法def red_pag(self): return 100
三、构造函数、析构函数
1.概念:
构造函数:构造函数,类在实例化的时候,会自动执行它
析构函数:析构函数,这个实例被销毁的时候自动执行的
2.例子:
def __init__(self): #构造函数 print('构造函数,类在实例化的时候,会自动执行它') self.__client = pymongo.MongoClient(host='xxxxxx',port=xxx) #类似于连接数据库的可以放在构造函数里,在实例化时就连一次连上
def __del__(self): #析构函数 print('析构函数,这个实例被销毁的时候自动执行的') self.__client.close() #类似于关闭数据库连接的可以放在析构函数里
四、继承、私有
1.私有:函数名或者变量名前面加__,这个函数或者变量就是私有的,私有只能在类里面用。
例子:
def __cry(self): #私有函数,只能类里面用,在类里面的其他函数里可通过self.__xx调用到该函数,但是在类外或是实例的时候无法调用到该函数 print('私有')
2.继承:继承就是一个类继承了另一个类后,会拥有另一个类的属性,例如变量或函数,但是如果在本类里有相同名称的方法或变量,优先于是本类,不会再去父类找。
例子1:class Father: #父类 money = '2000' def make_money(self): print('挣钱')
class Son(Father): #子类 pass
a=Son()a.make_money() #调用到父类的函数print(a.money) #调用到父类的变量例子2:
class One: #父类 def say(self): print('one')class Two(One): #子类,继承父类One def say(self,name): super().say() #执行父类方法,如果想不更改继承的父类方法下,又在父类方法上新增功能,则super().函数名()就是执行相应的父类方法 print('%sTwo' %name)b=Two()b.say('yuze')
来源:https://www.cnblogs.com/yz-test/p/9393141.html