一、类的对象、实例化、变量

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变成了a
Person.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')