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 @   莫离m  阅读(114)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示