欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 入门 之 初识面向对象

程序员文章站 2024-01-10 20:16:40
Python 入门 之 初识面向对象 初识面向对象编程 (核心--对象) 面向对象初识 面向对象结构 类角度操作类 对象角度操作类 self 是什么 面向对象中的查找顺序 ......

python 入门 之 初识面向对象

1、初识面向对象编程 (核心--对象)

(1)观察以下代码:

# 面向过程编程
s = "alexdsb"
count = 0
for i in s:
    count += 1
print(count)

s = [1,2,7,3,4,5,]
count = 0
for i in s:
    count += 1
print(count)

# 面向对象编程
def my_len(s):
    count = 0
    for i in s:
        count += 1
    print(count)
my_len([1,2,3,4,5])

可得出结论:

面向过程 vs 函数式编程

<1> 函数式编程 减少了重复代码
<1> 函数式编程 提高了代码的可读性高

(2)观察以下代码;

# 面向函数编程
def login():
    pass

def check_buy_goods():
    pass

def change_pwd():
    pass

def shopping():
    pass

def register():
    pass

def check_unbuy_goods():
    pass

# 面向对象编程
class auth:

    def login(self):
        pass

    def register(self):
        pass

    def change_pwd(self):
        pass

class shopping:

    def shopping(self):
        pass

    def check_buy_goods(self):
        pass

    def check_unbuy_goods(self):
        pass

可以得出结论:

函数式编程 vs 面向对象

<1> 面向对象 代码结构清晰,可读性高
<2> 面向对象使用 上帝思维

2、面向对象初识:

类:对一些事物的统称和概括 (就是具有相同属性和功能的一类事物)

对象:实实在在存在的东西,具有特征和功能 (就是类的具体表现形式)

3、面向对象结构:

class --- 关键字

class 类名: # 类名建议使用驼峰体 函数名建议使用下划线

静态属性(类变量,静态字段)
方法(类方法,动态属性,动态字段)
class people:

    mind = "有思想"  # 静态属性

    def eat(self):   # 方法
        print("在吃饭")

    def work(self):
        print("在工作")


class dog:

    hair = "毛"   # 静态属性

    def eat(self):
        print("吃食")

    def lick(self):
        print("添水")

4、类角度操作类:

class people:
    mind = "有思想"  # 静态属性

    def eat(self):   # 方法
        print("在吃饭")

    def work(self):
        print("在工作")

(1)_ dict _查看类下所有内容

print(people.__dict__)   # __dict__ 只能查看当前空间下的内容

(2). 万能的点 查看单个属性或方法

print(people.mind)      # 类名.属性名

一般情况我们不使用类名去操作方法(类方法)

(3)增:

people.emotion = "有情感"

(4)删:

del people.mind

(5)改:

people.mind = "无脑"

(6)查:

print(people.mind)  #类名.属性名   单独查一个
print(people.__dict__)    # 查看类下所有的

5、对象角度操作类:

class people:
    mind = "有思想"  # 静态属性

    def eat(self):   # 方法
        print("self --->",self)
        print("在吃饭")

    def work(self):
        print("在工作")

# 创建对象 -- 类名()
p = people()  # 实例化对象
print(p.__dict__)  # 对象的空间
print("p---->",p)
print(p.mind)
p.eat()
p.work()
class people:

    mind = "有思想"        # 静态属性

    def __init__(self,name,age,sex):     # 初始化
        # self == p
        self.name = name
        self.age = age
        self.sex = sex

    def eat(self):         # 方法
        print(self.name)
        print("在吃饭")

    def work(self):
        print("在工作")

p = people("marry",19,"男")       # 实例化一个对象
p.eat()

可以在类的外部给对象创建属性,但不建议这样使用

p.mind = "无脑"  # 给对象创了一个属性
print(people.__dict__)
print(p.__dict__)        # 对象查询对象中所有属性

(1)对象只能使用类中的属性和方法,不能进行修改

(2)实例化一个对象总共发生了三件事:

<1> 实例化一个对象,给对象开辟空间

<2> 自动执行_ _init__ 方法

<3> 自动将对象的地址隐性传递给了self

6、self 是什么?

(1)就是函数的位置参数

(2)实例化对象的本身(对象和self指向同一内存地址)

class people:

    mind = "有思想"  # 静态属性

    def __init__(self,name,age,sex,high=none):   # 初始化(给创建的对象封装独有属性)
        # self == p  地址相同
        self.name = name
        self.age = age
        self.sex = sex
        if high:
            self.high = high

    def eat(self):   # 方法
        print(f"{self.name}在吃饭")

    def work(self):
        print("在工作")

p1 = people("jim",19,"未知",170) # 实例化一个对象
p2 = people("kuqir",19,"未知",170) # 实例化一个对象
p3 = people("diva",19,"未知",170) # 实例化一个对象
p4 = people("李玲",19,"未知",170) # 实例化一个对象
p5 = people("好哥",19,"未知",170) # 实例化一个对象

p1.eat()
p2.eat()

7.类空间

(1)给对象空间添加属性:

对象的属性不仅可以在_ _init__里面添加,还可以在类的其他方法或者类的外面添加

class a:

    def __init__(self,name):
        # 类里边给对象添加属性
        self.name = name

    def func(self,sex):
        self.sex = sex

a = a("jim")
a.func("男")
# 类外边给对象添加属性
a.age = 18
print(a.__dict__)

# 总结:给对象空间添加属性可以在类的内部,类的外部,类中的方法

(2)给类空间添加属性:

类的静态属性不仅可以在内部添加,还可以在类的外部添加

class a:

    def __init__(self,name):
        # 类内部给类空间添加属性
        a.name = name

    def func(self,age):
        # 类中的方法给类空间添加属性
        a.age = age

类外部给类空间添加属性
a.name = "alex"
a = a('meet')
a.func(19)
print(a.__dict__)

# 总结:给类空间添加属性可以在类的内部,类的外部,类中的方法

8、面向对象中的查找顺序

对象查找属性的顺序:先从对象空间找 ——> 类空间找——>父类空间找——>·········

类名查找属性的顺序:先从本类空间找 ——> 父类空间找——>······

上面的顺序都是单向不可逆的,类名不可能找到对象的属性。(对象之所以可以找到类,是因为对象空间中有类对象指针这么个东西)