Python 面向对象 属性相关

什么是对象
对象是具体物体,拥有属性,拥有行为
python 是一门特别彻底的面向对象编程(OOP)的语言
面向对象:在解决问题的时候,关注的是解决问题的每一个过程
面向对象:在解决问题的时候,关注的是解决问题所需要的对象
面向对象本身是对面向过程的封装

面向对象最重要的:

  • 按照功能对象进行划分
  • 找到对象,确定对象的属性和行为

如何从面向过程的思想,过渡到面向对象编程

  1. 列举出一个任务的具体实现步骤
  2. 分离这些实现步骤中的功能代码块
  3. 将这些功能代码块划分到某一个对象中
  4. 根据这个对象以及对应的行为,抽象出对应的类,设计类

某一个具体对象特征的抽象
作用:根据抽象的类,生产具体的对象
类的组成:名称,属性,方法
以上的属性和方法,都是抽象的概念。
在产生对象后,对象才具有具体的属性值和方法实现

对象和类的关系:
对象抽象成类,类实例化成对象。

python 分为经典类和新式类

经典类:

class Money:
    pass
# 定义一个类
class Money:
    pass

print(Money)

# 实例化一个对象
one = Money()
print(one)

<class ‘main.Money’>
<main.Money object at 0x0396CF10>

# 定义一个类
class Money:
    pass

print(Money.__name__)

xxx = Money
print(xxx.__name__)

Money
Money

属性

变量是可以改变的量值
属性是属于某个对象的特性。
变量根据不同的位置存在不同的访问权限。
属性只能通过对象来进行访问
判定依据:是否存在宿主

增加属性

直接通过对象,动态添加


# 定义一个类
class Person:
    pass

# 根据类,创建一个对象
p = Person()
# 给 p 对象,添加一些属性
p.age = 18
p.height = 180

print(p.age)
print(p.__dict__)

18
{‘age’: 18, ‘height’: 180}

修改属性

p.age = 123

查询属性

# 定义一个类
class Person:
    pass

# 根据类,创建一个对象
p = Person()
# 给 p 对象,添加一些属性
p.pets = ['xiaohua', 'xiaohei']
print(p.pets, id(p.pets))
p.pets.append('xiaohuang')
print(p.pets, id(p.pets))

[‘xiaohua’, ‘xiaohei’] 74181688
[‘xiaohua’, ‘xiaohei’, ‘xiaohuang’] 74181688

删除属性

# 定义一个类
class Person:
    pass

# 根据类,创建一个对象
p = Person()
# 给 p 对象,添加一些属性
p.age = 18
del p.age

类属性

类增加属性

方式1:
类名.类属性 = 值

方式2:

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

print(Money.age)
print(Money.__dict__)

类查询属性

通过对象查询:

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

one = Money()

print(one.age)

18

Python 对象的属性查找机制,优先到对象自身去查找属性,如果没有找到,则根据__class__找到对象对应的类,到这个类里面查找

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

class Test:
    sex = 'male'

one = Money()
one.sex = 'female'
one.__class__ = Test

print(one.sex)

female

修改类属性

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

one = Money()

print(Money.age)
one.age = 19
print(Money.age)
print(one.__dict__)

18
18
{‘age’: 19}

删除类属性

del 类名.属性
del 只能删除直系属性

类属性的内存存储问题

一般情况下,属性存储在__dict__的字典当中,有些内置对象没有这个__dict__属性。
一般对象可以直接修改__dict__属性。
类对象__dict__为只读,默认无法修改,可以通过setattr方法修改

class Money:
    pass

one = Money()

one.__dict__ = {'name': 'sz', 'age': 18}

print(one.name)

sz

类属性被各个对象共享

查看一个类的所有属性
类名.__dict__

限制添加属性

__slots__

class Person:
    __slots__ = ['age']
    pass

p1 = Person()
p1.age = 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值