首页 > 编程语言 >python面向对象-学习笔记(二、类&对象的属性)

python面向对象-学习笔记(二、类&对象的属性)

时间:2023-10-29 15:35:36浏览次数:44  
标签:__ python Money age 笔记 面向对象 print class 属性

如何定义一个类?

创建类的格式
class 类名:
	pass

怎么通过类,创建出一个对象?

创建类,并实例化对象
class Money:
    pass

one = Money()
# 打印类
print(Money)
# 打印类的实例
print(one)

image

类的别名和打印类的名称
class Money:
    pass
# 打印类的名称
print(Money.__name__)
# 类的别名
xxx = Money
print(xxx.__name__)

image

类名也是变量名
class Money:
    pass


# Money既是类名也是变量名
Money = 666
print(Money)

image

对象指向的类
class Money:
    pass


one = Money()
# 对象指向的类
print(one.__class__)

image

属性相关

属性和变量的区别及判定依据?

  1. 区别
    • 概念
    1. 变量是“可以改变的量值”
    2. 属性是“属于某个对象的特性”
    • 访问权限
    1. 变量:根据不同的位置,存在不同的访问权限(全局变量,局部变量...)
    2. 属性:只能通过对象来进行访问
  2. 判断依据:是否存在宿主

对象属性

给对象增加属性(一)
class Person:
    pass


# 2.根据类,创建一个对象
p = Person()

# 3.给person对象,增加一些属性
p.age = 18
p.height = 180

# 4.验证属性是否添加成功
print(p.age)
# 系统自带的所有属性和方法字典
print(p.__dict__)

image

对象修改属性(一)
class Person:
    pass


# 属性修改
p = Person()
p.age = 18
print(p.age)
p.age = 100
print(p.age)

image

对象修改属性(二)可迭代属性
class Person:
    pass


# 2.根据类,创建一个对象
p = Person()

# 5.1 属性修改(p.pets地址未变)
p.pets = ['小花', "小黑"]
print(p.pets, id(p.pets))
p.pets.append('小黄')
print(p.pets, id(p.pets))
# 5.2 属性修改(p.pets地址变了)
p.pets = [1, 2]
print(p.pets, id(p.pets))

image

一般情况下,属性存储在__dict__的字典中的(有些内置对象没有__dict__属性?) 一般的对象可以修改__dict__属性 对象增加/修改/删除属性(另类)
class Money:
    pass


# 另一种方式添加对象的属性
one = Money()
one.__dict__ = {"name": "张三"}
print(one.name)
one.__dict__["name"] = "李四"
print(one.name)
one.__dict__ = {}
print(one.__dict__)

image

对象删除属性
class Person:
    pass


# 删除对象的属性
p = Person()
p.age = 18
del p.age
print(p.age)

image

不同对象之间能否访问对方的属性
class Person:
    pass


# 2.根据类,创建一个对象
# p = Person()

p1 = Person()
p2 = Person()
p1.age = 18
p2.address = "上海"
# p1能访问p2的属性吗?
print(p1.address)

image

类属性

类属性的增、改、查、删
class Money:
    pass


# 类属性的增、改、查、删
Money.count = 1
print(Money.count)
print(Money.__dict__)
Money.count = 10
print(Money.count)
del Money.count
print(Money.count)

image

类属性的增加方式(二)常用方式
class Money:
    count = 1
    age = 18
    number = 666


print(Money.count)
print(Money.age)
print(Money.number)
print(Money.__dict__)

image

为什么可以通过对象访问类的属性? 和Python对象的属性查找机制有关。 优先到对象自身去查找属性,找到就结束;如果没有找到,则根据__class__找到对应的类,到这个类中查找 通过对象查询类的属性
class Money:
    count = 1
    age = 18
    number = 666


one = Money()
print(one.count)
print(one.age)
print(one.number)

image

修改对象的指向
class Test:
    sex = "男"


class Money:
    count = 1
    age = 18
    number = 666


one = Money()
# 通过修改该值,修改类的指向
one.__class__ = Test

print(one.sex)
print(one.age)

image

当对象和类中都有相同属性时,通过对象访问的是对象自身的属性
class Test:
    sex = "男"


one = Test()
one.sex = "女"

print(one.sex)

image

类中的属性,无法通过对象来修改
class Money:
    count = 1
    age = 18
    number = 666


one = Money()
print(Money.age)
one.age = 19
print(one.__dict__)
print(Money.age)
类中的属性,无法通过对象来删除
class Money:
    count = 1
    age = 18
    number = 666


one = Money()
del one.age

image

类中的__dict__只读,无法修改
class Money:
    count = 1
    age = 18
    number = 666
    pass

Money.__dict__={"name":"sz"}
print(Money.name)

image

类中的__dict__只读,无法修改(二)
class Money:
    count = 1
    age = 18
    number = 666
    pass


Money.__dict__["sex"] = "男"
print(Money.sex)

image

类的属性被所有对象共享
class Money:
    age = 18


one = Money()
two = Money()

print(one.age)
print(two.age)

Money.age = 20
print(one.age)
print(two.age)

image

对象属性和类属性之间的区别和联系?

对象中添加与类中相同的属性并赋值(一)
class Person:
    age = 10


p = Person()

# 添加对象的属性
p.age += 5
# 上面语句相当于 p.age = p.age +5 =15
print(Person.age)  # 10
print(p.age)  # 15

image

高级

限定对象中的属性__slots__
class Person:
    # 限定对象中的属性(类中不允许出现__slots__中包含的属性)
    __slots__ = ["age"]
    # age = 15 # 如下图一
    num = 110
    pass


print(Person.num)
p1 = Person()
p1.age = 10
p1.num = 2

print(p1.age)
print(p1.num)

image

image


学习链接: 【Python】零基础入门 面向对象编程(强烈推荐)

标签:__,python,Money,age,笔记,面向对象,print,class,属性
From: https://www.cnblogs.com/amanzhj/p/17794776.html

相关文章

  • 学习笔记7
    苏格拉底挑战第四章并发编程一、知识点归纳(一)线程1.线程的原理2.线程的优点(1)线程创建和切换速度更快(2)线程的响应速度更快(3)线程更适合并行计算3.线程的缺点(1)由于地址空间共享,线程需要来自用户的明确同步。(2)许多库函数可能对线程不安全。(3)在单CPU系统......
  • Python 实现 xls 文件转 xlsx 的若干方法
    在Python中,可以采用pandas、pyexcel、win32com和xls2xlsx这四个模块,实现xls转xlsx格式。以Excel示例文件test_Excel.xls为例,具体内容如下图所示:  pandas 安装命令pipinstallpandas-ihttps://mirrors.aliyun.com/pypi/simple具体使用方法importpa......
  • 《Attention Is All You Need》阅读笔记
    论文标题《AttentionIsAllYouNeed》XXXIsAllYouNeed已经成一个梗了,现在出现了很多叫XXXIsAllYouNeed的文章,简直标题党啊,也不写方法,也不写结果,有点理解老师扣论文题目了。作者这个作者栏太夸张了。八个作者全部标星,均等贡献。甚至专门写了一段介绍每个人的工......
  • 学习笔记7
    第四章总结并行计算导论要求解某个问题,先要设计一种算法,描述如何一步步地解决问题,然后用计算机程序以串行指令流的形式实现该算法。在只有一个CPU的情况下,每次只能按顺序执行某算法的一个指令和步骤。但是,基于分治原则(如二又树查找和快速排序等)的算法经常表现出高度的并行性,......
  • Unity学习笔记--入门
    Unity引擎学习入门:Unity中的坐标系:左手坐标系(z轴正方向向里面)x轴:平行屏幕向右正方向y轴:平行屏幕向上正方向Z轴:垂直屏幕向内为正方向【补】openGL是右手坐标系DirectX是左手坐标系窗口:窗口布局Layout:Scene这里我们可以看见所有的场景内容。窗口上的工具栏:有关......
  • 《信息安全系统设计与实现》第八周学习笔记
    《信息安全系统设计与实现》第八周学习笔记第四章并发编程并行计算尝试使用多个执行并行算法的处理器更快速的解决问题顺序算法与并行算法顺序算法:所有步骤通过单个任务依次执行,每次执行一个步骤,当所有步骤执行完成时,算法结束。并行算法:cobegin-coend代码块来指定独立......
  • Python 模块:创建、导入和使用
    什么是模块?将模块视为代码库。模块是一个包含一组函数的文件,您想要在应用程序中包含这些函数。创建一个模块要创建一个模块,只需将要包含在其中的代码保存在扩展名为.py的文件中:示例:将以下代码保存在名为mymodule.py的文件中:defgreeting(name):print("Hello,"+name)......
  • win10 openocd通过vscode远程调试stm32的uboot--Apple的学习笔记
    一,前言我在uboot支持的cortex-M4内核启动流程分析--Apple的学习笔记中就说过了,我计划要单步调试uboot,但是我只有stlink,所以要基于openocd的gdb来调试,所以就做了尝试,花费约2天时间,虽然做了些无用功,专门还装了ubuntu18.04,且基于ubuntu还安装了openocd这些其实都无用的,但是就是这些过......
  • python循环迭代
    学习目标掌握for与while循环掌握continue,break,pass的区别核心知识循环中有3种常见的方式顺序:从上向下,顺序执行代码(从上往下执行)分支:根据条件判断,决定执行代码的分支(if/else)循环:让特定代码重复执行(for/while)for循环for可循环遍历的对象有字符串,列表,字典,集合,元组#......
  • python条件判断
    学习目标1、掌握条件判断和流程控制2、掌握条件运算符==,>,<,in3、掌握if/else/elif判断核心知识if判断判断相同:==和is用于判断两个变量的值是否一样,==是判断数据的值是否一样,is不仅判断数据的值还判断数据是否指向同一个对象。判断大小:可配合>、<来判断大小判断存......