Python3 的面向对象编程

面向过程 vs 函数

 

面向过程编程

1、重复代码多

2、可读性差

 

函数式编程 vs 面向对象编程

面向对象第一个优点:类是一组相似功能的集合,让我代码的组织结构更加清晰规范化

面向对象的第二优点:上帝的思维,用面向对象设计程序,

类是一个公共模板,对象去操作使用这个公共模板

 

 

类和对象

 

类是具似相同功能和属性的一类实物

对象是类的具体体现,具体到一个,具有类的属性,且还有自己的独特属性

# 下面就是一个例子:
class Human:
    '''
    此类是构建一个人类
    '''
    # 第一部分:静态属性、属性、变量、静态字段
    mind = "有思想"
    emotion = "感情丰富"
    body_list = ["灵活", "矫健", "长寿"]
    
    # 第二部分:动态属性、方法、函数
    def eat(self):
        print("特别会吃")
    def work(self):
        print("要做很多活儿")
        
print(Human.__dict__)  # 查看类中的所有内容,得到的是一个字典
{'__module__': '__main__', '__doc__': '\n    此类是构建一个人类\n    ', 
'mind': '有思想', 'emotion': '感情丰富', 'body_list': ['灵活', '矫健', '长寿'],
'eat': <function Human.eat at 0x000000000283A9D8>, 
'work': <function Human.work at 0x000000000283A950>, 
'__dict__': <attribute '__dict__' of 'Human' objects>, 
'__weakref__': <attribute '__weakref__' of 'Human' objects>}

类的使用:

一、静态属性

1、类名

查看类中的 所有 内容 类名.__dict__,查看单个也可以用,

使用 __dict__只是查询类中的所有内容,不能增删改类中的内容,尽量不要查询单个属性.

1、通过类名
print(Human.__dict__['mind'])  # 查
Human.__dict__['emotion'] = None  # 改
print(Human.__dict__['emotion'])

2、万能的点.

通过类名和点,对类的属性进行增删改查

2、万能的点
Human.learn = '要读书学习'  # 增
del Human.emotion  # 删
Human.mind = '多动脑'  # 改
print(Human.emotion)  # 查

 

二、方法

3、代码中除去(静态方法,类方法)一般不用类名去执行类中的方法,类名主要是操作类的属性的,对象主要操作类中的方法。

print(Human.work)  # 打印的是方法(函数)的内存地址
Human.work(123) # 一般不用类名执行类中的方法,而是用对象;self位置参数可随意传

对象,实例化

obj = Human() # 实例化过程,实例化一个对象,产生一个对象.
print(obj)  # 打印的是类的内存地址
# 实例化一次形成一个对象,对象的内存地址不同,即不同的对象

 实例化经历3步:
1.在内存中开辟了一个对象空间
2.自动执行了__init__(seif)方法,解释器把对象空间地址传给了self
3.执行__init__的代码,给对象空间封装属性

class Human:
    mind = "有思想"
    emotion = "感情丰富"
    body_list = ["灵活", "矫健", "长寿"]
    def __init__(self):
        self.n = "元芳"
        self.a = 23
        self.s = "男"
        
obj = Human()
print(Human().__dict__)  # {'n': '元芳', 'a': 23, 's': '男'}
print(obj.__dict__) # 结果同上,实例化的一个对象

class Human:
    mind = "有思想"
    emotion = "感情丰富"
    body_list = ["灵活", "矫健", "长寿"]
    def __init__(self, name, age, sex):
        self.n = name
        self.a = age
        self.s = sex
fang = Human("元芳", 23, "男")  # 实例化一个对象
print(fang.__dict__)  # {'n': '元芳', 'a': 23, 's': '男'}

 

对象的角度操作对象,类

1,对象查看对象空间的所有属性,(能改能删)不建议用__dict__增删改对象的属性

2,对象操作对象空间的属性. 万能的点 .可以增删改查

3,对象查看类中的静态属性,只能查看!!!

4,对象调用类中的方法.(一个类可以实例化多个对象)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值