首页 > 编程语言 >Python基础:面向对象

Python基础:面向对象

时间:2023-03-17 16:34:58浏览次数:33  
标签:Python self 基础 Dog 面向对象 实例 对象 print 属性

一、理解面向对象

面向对象:对整个代码逻辑(包含数据、函数、逻辑)进行包装(专业术语:封装),最大程度提升代码复用,减少编码量

二、类和对象

2.1 理解类和对象

类:类是对一系列具有相同特征和行为的实物的统称,是一个抽象的概念,不是真实存在的事物。特征即是属性,行为即是方法。

对象:对象是由类创造出来的一个具体存在的,可以直接使用的。由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法。

在程序开发中,应该先有类,再有对象。

 

2.2 类和对象的关系

类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。类只有一个,而对象可以有很多个,不同对象之间属性可能会各不相同。

 

2.3 类的设计

在使用面向对象开发前,应该首先分析需求,确定一下,程序中需要包含哪些类。

通过需要设计一个类,需要满足以下三个要素:

  • 类的名称,这个事物的名字,满足大驼峰命名法
  • 类的属性:这类事物具有什么样的特征
  • 类的方法:这类事物具有什么样的行为

2.4 面向对象实现方法

class 类名():    # 注意:类名要满足标识符命名规则,同时遵循大驼峰命名习惯
  代码
class Plane():
    def fly(self):
    print('我会飞')

 

2.4.1 创建对象

对象也叫实例,创建对象的过程叫实例化。

语法:对象名 = 类名()

#创建对象
plane1 = Plane()
print(plane1)
plane1.fly()

2.4.2 self

self指的是调用该函数的对象

# 1.定义一个类
class plane():
  def fly(self):
    print('我会飞')
    print(self)
#2 实例化两个对象
plane1 = plane()
print(plane1)
plane2 = plane()
print(plane2)
# 3.调用实例方法
plane1.fly()
plane2.fly()

注意:打印对象和self得到的结果是一致的,都是当前内存中存储的地址

 

2.4.3 魔法方法

在python中, __xx__() 的函数叫做魔法方法,指的是具有特殊功能的函数

__init__:对象被初始化时,会被自动调用,专门定义一个对象具有哪些属性的方法(重点,不需要掌握)

__str__:返回对象的描述信息,print函数输出使用,不加 __str__ 正常返回对象指向的内存地址。该方法在print(对象)时,会被自动调用。当针对对象做str类型转换时,也会自动调用。

def __str__(self):
    return f'{self.name},{self.age},{self.grade},{self.score}'

这里返回的必须是str类型,用其他类型会报错。

 

三、添加和获取对象属性

属性即是特征,比如:飞机的长,宽,重量:
对象属性既可以在类外面添加和获取,也能在类里面添加和获取。

3.1 类外面添加对象属性

语法

对象名.属性名 = 值

示例:

plane1.lenth = 400
plane1.weight = 500

3.2 类外面获取对象属性

语法

对象名.属性名

示例:

print(plane1.weight)
print(plane1.lenth)

3.3 类里面获取对象属性

self.属性名

 

四、类属性和实例属性

4.1 类属性

类属性的优点

  • 类的实例,记录的某项数据 始终保持一致时,则定义类属性。
  • 实例属性 要求每个对象为其单独开辟一份内存空间 来记录数据,而类属性为全类所共有,仅占用一份内存,更加节省内存空间。

 

4.1.1 设置和访问类属性

  • 类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有
  • 类属性可以使用类对象实例对象访问
class Dog(object):
  tooth = 10
 
wangcai =Dog()
xiaohei = Dog()
print(Dog.tooth)  # 10
print(wangcai.tooth) #10
print(xiaohei.tooth) # 10

 

4.1.2 修改类属性

类属性只能通过类对象修改,不能通过实例对象修改。

如果通过实例对象修改类属性,表示的是创建了一个实例属性。

class Dog(object):
  tooth = 10
wangcai = Dog()
xiaohei = Dog()
# 修改类属性
Dog.tooth = 20
print(Dog.tooth) # 20
print(wangcai.tooth) #20
print(xiaohei.tooth) # 20
# 修改实例属性
wangcai.tooth = 30
print(wangcai.tooth) #给实例对象增加一个实例属性 30
print(Dog.tooth) # 20
print(xiaohei.tooth) # 20

 

4.2 实例属性

实例属性不能通过类去访问。

class Dog(object):
  def __init__(self):
    self.age= 5
  def info_print(self):
    print(self.age)
wangcai = Dog()
print(wangcai.age)
# print(Dog.age) #报错,实例属性不能通过类去访问
wangcai.info_print() # 5

 

五、类方法和静态方法

5.1 类方法

5.1.1 类方法特点

  • 第一个形参是类对象的方法
  • 需要用装饰器 @classmethod 来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls 作为第一个参数。cls表示当前类。
  • 注意:类方法无法直接使用self去调用对象属性和对象方法

 5.1.2 类方法使用场景

  • 当方法中 需要使用类对象(如访问私有属性等)时,定义类方法
  • 类方法一般和类属性配合使用
    class Student():
        school = '郑梁梅'
    @classmethod def show_school(cls): print(f'学校是{cls.school}')

    student1 = Student()
    result = student1.show_school #实例对象访问类方法
    Student.show_school   # 类对象访问类方法

5.2 静态方法

5.2.1 静态方法特点

  • 需要通过装饰器 @staticmethod 来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象(形参没有 self 或者 cls )
  • 静态方法 也能通过实例对象和类对象去访问

5.2.2 静态方法使用场景

  • 当方法中 既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性,类方法,创建实例对象等)时,定义 静态方法
  • 取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗
  • 仅仅是为了按照一定规则分类,把这个函数放在了类下面进行管理
class Dog(object):
  @staticmethod
  def info_print():
    print('这是一个狗类,用于创建狗的实例......')
   
wangcai = Dog()
#静态方法既可以使用对象访问又可以使用类访问
wangcai.info_print()
Dog.info_print()

 

标签:Python,self,基础,Dog,面向对象,实例,对象,print,属性
From: https://www.cnblogs.com/daydayup-lin/p/17227233.html

相关文章

  • 100道python基础题——(3)
    dict()用法问题:使用给定的整数n,编写一个程序生成一个包含(i,i*i)的字典,该字典包含1到n之间的整数(两者都包含)。然后程序应该打印字典。假设向程序提供以下输入:8则输出为......
  • 106Go基础2
    基础知识1、变量声明和赋值在Go语言中,可以使用var关键字声明变量,也可以使用:=运算符进行简短声明。以下是变量声明和赋值的示例代码:varxintx=1y:=2......
  • 文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入
    “文心”取自《文心雕龙》一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心。......
  • Web自动化——测试实战( 编写京东搜索脚本python+selenium框架)(四)
    theme:channing-cyan电商网站Web自动化测试实战(编写京东搜索脚本)1,打开京东页京东首页地址:https://www.jd.com/,故进入京东首页如下:2,打开浏览器开发者模式定位元素......
  • 100道python基础题——(1)
    题11级问题:编写一个程序,它将找到所有这些数字,可被7整除,但不是5的倍数,2000年至3200年(包括在内)。得到的数字应按逗号分隔的顺序打印在一行上。提示:考虑使用range(#begin,......
  • 【python爬虫】bs4遍历、搜索文档树 bs4使用css选择器 selenium基本使用 selenium查
    目录上节回顾今日内容0bs4遍历文档树1bs4搜索文档树1.1find方法的其他参数2css选择器3selenium基本使用4无界面浏览器4.1模拟登录百度5selenium其它用法5.0查找标......
  • python-numpy
    numpy简介 一、Ndarray对象NumPy中定义的最重要的对象是称为 ndarray 的N维数组类型。它描述相同类型的元素集合。可以使用基于零的索引访问集合中的项目。n......
  • python __new__方法与单例模式
    1、new()至少要有一个参数cls,代表当前类,此参数在实例时由python解释器自动识别,2、new()必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以......
  • Python 中,any() 是一个内置函数,用于判断给定的可迭代对象(iterable)中是否存在至少一个
    如果可迭代对象中的至少一个元素为真,则any()返回True,否则返回False。以下是使用any()函数的示例:#判断列表中是否存在奇数my_list=[1,2,4,6]ifany(x%2=......
  • java基础
    java中的小常识JDK、JRE、JVMJDK:JavaDevelopmentKit是一个提供开发和执行(运行)Java程序环境的工具包,包括两个东西,开发工具(提供开发java程序的环境)和JRE(执行java程序)......