设为首页 加入收藏

TOP

Python学习三天计划-3(一)
2023-07-23 13:45:35 】 浏览:48
Tags:Python 习三天 计划

面向对象

一、类的定义

1.类定义

image-20221022233610387

  • class是关键字,表示要定义类了
  • 类的属性,即定义在类中的变量(成员变量)
  • 类的行为,即定义在类中的函数(成员方法)

2.对象

创建类对象的语法:

image-20221022233642893

class Stu:
	name = None
    age = None
    
student = Stu()

3.变量、方法

class Stu:
	name = None
    age = None
    
    # 注意:在类的方法参数中,要加入self参数,相当于java的this关键字(表示类对象本身)
    def say(self):
        print("hello")

self关键字

self关键字是成员方法定义的时候,必须填写的。

  • 它用来表示类对象自身的意思
  • 当我们使用类对象调用方法的是,self会自动被python传入
  • 在方法内部,想要访问类的成员变量,必须使用self

注意:

传参时可以忽略

class Stu:
    name = None
    age = None

    # 注意:在类的方法参数中,要加入self参数,相当于java的this关键字(表示类对象本身)
    def say(self):
        print("hello")


student = Stu()
# 调用say方法时,不需要传入参数
student.say()

image-20221022234335932

二、类的属性和行为

image-20221022234436528

现实世界的事物也有属性和行为,类也有属性和行为。

使用程序中的类,可以完美的描述现实世界的事物

为什么非要创建对象才能使用呢?

类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作**

这种套路,称之为:面向对象编程

image-20221022234559256

三、类的构造方法

image-20221022234701546

代码中,为对象的属性赋值需要依次进行,略显繁琐。

使用构造方法可以简化赋值操作

描述

Python类可以使用:_init_()方法,称之为构造方法。

可以实现:

  • 在创建类对象(构造类)的时候,会自动执行。
  • 在创建类对象(构造类)的时候,将传入参数自动传递给___init_()__方法使用。

使用

class Stu:
	name = None
	age = None

	def __init__(self, name, age):
		self.name = name
		self.age = age

	# 注意:在类的方法参数中,要加入self参数,相当于java的this关键字(表示类对象本身)
	def say(self):
		print("hello")

student = Stu("郜宇博",21)
print(student.age)
print(student.name)

image-20221022235250167

注意

不要忘记init前后都有2个下划线

构造方法也是成员方法,不要忘记在参数列表中提供:self

构造方法内定义成员变量,需要使用self关键字

四、魔术方法

内置的类方法,各自有各自特殊的功能,这些内置方法我们称之为:魔术方法

image-20221022235622322

方法 功能
init 构造方法,可用于创建类对象的时候设置初始化行为
str 用于实现类对象转字符串的行为
lt 用于2个类对象进行小于或大于比较
le 用于2个类对象进行小于等于或大于等于比较
eq 用于2个类对象进行相等比较

1._str_()字符串方法

类似于java的toString()方法

在打印类对象时,将原来的打印内存信息转换为自定义打印格式

class Stu:
	name = None
	age = None

	# 注意:在类的方法参数中,要加入self参数,相当于java的this关键字(表示类对象本身)
	def say(self):
		print("hello")

	def __init__(self, name, age):
		self.name = name
		self.age = age
	def __str__(self):
		return f"姓名:{self.name},年龄:{self.age}"
student = Stu("郜宇博",21)
print(student)

image-20221022235916194

2._lt_()字符串方法

在进行比较时,可以直接使用 > < 符号进行比较(指定比较的数据)

class Stu:
	name = None
	age = None

	def __init__(self, name, age):
		self.name = name
		self.age = age
		
	# Less than的简称
	def __lt__(self, other):
		return self.age < other.age
student_1 = Stu("郜宇博",21)
student_2 = Stu("郜宇博",50)
# 相当于比较年龄的大小
print(student_1 < student_2)

image-20221023000433771

五、封装

面向对象包含3大主要特性:

  • 封装
  • 继承
  • 多态

image-20221023000559298

现实世界中的事物,有属性和行为。

但是不代表这些属性和行为都是开放给用户使用的

既然现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。

描述

类中提供了私有成员的形式来支持。

  • 私有成员变量
  • 私有成员方法

在类中定义的私有变量和方法只能类的内部使用

只需要在定义变量、方法名时前面添加两个下划线符号__

class Stu:
	name = None
	age = None
	__gender = '男'

stuent = Stu()
print(stuent.gender)

image-20221023000948260

六、继承

image-20221023001115000

每一款手机都是基于老款的设计图,修修改改

1. 代码

如下代码很复杂,需要引入继承来简化代码

image-20221023001227932

引入继承

image-20221023001334330

如下为多继承

pass关键字

代表不执行,空实现,可以用来构建空类,空方法,抽象方法

2. 多继承

image-20221023001427677 image-20221023001618126

注意

image-20221023001637282

多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。

即:先继承的保留,后继承的被覆盖

image-20221023001653228

3. 复写

子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。

即:在子类中重新定义同名的属性或方法

class Stu:
   name = None
   age = None

   def    say(self):
      print("我是学生")

class Man(Stu):
   gender = '男'
   def say(self):
      print("我是男学生")

student = Man()
# 相当于调用Man类重写的say()方法
student.say()

image-20221023002207355

4.调用父类

方式1:使用父类名调用

  • 使用成员变量:父类名.成员变量
  • 使用成员方法:父类名.成员方法(self)

方式2:使用super()调用父类成员

  • 使用成员变量:super().成员变量
  • 使用成员方法:super().成员方法(
class Stu:
	name = None
	age = None

	def	say(self):
		print("我是学生")

class Man(Stu):
	gender = '男'
	def say(self):
		print
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇过滤组件、排序组件、全局异常处.. 下一篇字典的创建方式

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目