Python学习笔记(1)

一、类的基本概念

类是一组具有相同属性和方法的所有对象的集合或者抽象,定义一个类使用关键字 class , 类里面的方法必须接收一个self参数,该参数表示创建的对象本身,其语法如下:

class test:
  name = ''
  age = 12
  height = 165
  
  def like(self):
    print('这是一个方法')

 

对象是类的一个实体,类是对象的抽象;对象是客观世界存在的一个实体。 用类创建一个对象并调用内部的属性,如下:

class Cat:
  name = ''
  def like(self):
    print('这是一个类的方法')
  def show(self):
    print(self.name)

cat = Cat()
cat.name = '属性赋值'
cat.like()  #这是一个类的方法
cat.show()  # 属性赋值

 

每个类都默认存在一个__init__(self)   函数,称之为构造函数(初始化方法),用来创建对象,在创建对象的时候会自动调用。我们可以在创建对象的时候使用构造函数进行赋值:

class Stu:
  def __init__(self, _name, _age):
    print('这是一个构造函数')
    self.name = _name
    self.age = _age
  name = ''
  age = ''
  def show(self):
    print(self.name, self.age)

obj = Stu('小米', 18)   # 传参给构造函数进行赋值
obj.show()     # 小米 18

 

每个类都默认存在一个 __del__(self) 函数,称为析构函数(销毁时的方法),在对象被动(del 删除)或主动(程序执行完毕)销毁的时候,会自动调用。我们可以使用析构函数在对象即将销毁时执行某些逻辑。 

class Stu:
  def __del__(self):
    print('这是一个析构函数')

obj = Stu()   
del obj

 

类封装的目的:类内部的数据可以在外部直接访问,这种方式不安全。我们需要限制在类的外部不能随意访问属性,并对某些属性进行隐藏。类的变量分为私有变量和类变量:

类的私有变量:在变量名前添加两个下划线开头,声明该属性为私有,不能在类的外部被使用或 访问。例如 __test = ‘这是私有属性’。如果必须在外部进行访问,可以使用 对象名._类名私有属性名  的方式进行访问 。对象名和类名之间有一个点和一个下划线,类名后面是私有属性名

类的私有方法:类的私有方法跟私有变量一样,在方法名前加两个下划线开头 ; 在外部访问的方式也跟私有变量一样

class Stu:
  __test = '这是私有变量'
  def get(self):
    return self.__test

obj = Stu()
print(obj._Stu__test)
print(obj.get())

类变量:指的是所有对象所共享的变量,类变量定义在类的定义之后,实例化前后都可以使用

类变量可以用 类名.类变量 和  self.类变量  两种方式访问,后者一般不建议使用。类变量是所有对象所共享的,无论任何时候都建议用类名的方式访问类变量。

class Stu:
  name = '这是类变量'
  def test(self):
    print(self.name)     #  两种方式都可以访问
    print(Stu.name)      # 推荐方式

print(Stu.name)     # 外部使用类名也可以访问
obj = Stu()
obj.test()

 

实例变量:指的是在__init__(self) 方法内声明的变量。 实例变量必须在实例化类后才能使用。实例变量只能通过对象访问(self), 不能通过类名访问。

class Stu:
  def __init__(self, name, age):
    self.name = name           #  实例变量
    self.age = age

 

类的三种方法分为 静态方法、类方法、实例方法。

实例方法:只能被实例对象调用,第一个参数必须默认传实例对象,一般习惯用self。  在实例方法内部调用另一个实例方法,使用 self.方法名

静态方法:使用 @staticmethod 修饰,对于参数没有要求,可以用 类名.方法名 和 self.方法名 两种方式访问。在静态方法内部调用另一个静态方法,使用 类名.方法名

类方法:  使用@classmethod 修饰, 第一个参数必须默认传类, 一般习惯用 cls  。可以用 类名.方法名 和 self.方法名 两种方式访问

class Stu:
  def __init__(self):
    print('这是一个实例方法')

  @staticmethod
  def statics():
    print('这是一个静态方法')

  @classmethod
  def classTest(cls):
    print('这是一个类方法')

 

继承的概念:一个类从另一个类中继承一些属性和方法,(无法继承私有的)我们把这个类叫做子类(派生类),另一个类叫做父类(基类)。其语法如下:class childrenClass(parentClass)

多继承:   一个子类可以同时继承多个父类,用 逗号隔开;如果继承的父类有相同的属性或者方法,则按照传入的顺序优先使用,先传先用。 

继承传递: 如果A类继承B类, B类继承C类, 那么默认A类继承C类。

类方法重写:  当子类继承的方法不适用的时候,可以进行重写。在子类内部定义一个跟继承方法相同名称的的方法,可以覆盖继承过来的方法。

class parent:
  name = '这是父类属性'
  def show(self):
    print(parent.name)

class children(parent):
  types = '这是子类属性' 
  def test(self):
    print(children.types)

obj = children()
obj.test()
obj.show()
posted @ 2021-01-14 17:52  莫离m  阅读(104)  评论(0编辑  收藏  举报