day24

今日内容:
      类与对象
      属性查找
      绑定方法

def choose(stu_self):
    print(f"{stu_self['name']} {stu_self['age']} {stu_self['gender']} 正在选课。")


stu_obj = {
    'name': 'abbc',
    'age': 20,
    'gender': 'male',
    'choose': choose
}

stu_obj['choose'](stu_obj)

# 1、如何基于面向对象的思想写程序
# 例1
# 学生的数据
# stu_name = "xxx"
# stu_age = 18
# stu_gender = "male"


# 学生的功能
# def choose(name, age, gender):
#     print('%s:%s:%s 正在选课' % (name, age, gender))


# choose(stu_name,stu_age,stu_gender)


# 例2:基于对象式的思想进行改写
# def choose(stu_self):
#     print('%s:%s:%s 正在选课' % (stu_self["stu_name"], stu_self["stu_age"],stu_self["stu_gender"],))
#
#
# stu_obj = {
#     "stu_name": "xxx",
#     "stu_age": 18,
#     "stu_gender": "male",
#     "choose":choose
# }


# print(stu_obj["stu_name"])
# stu_obj["choose"](stu_obj)


# python提供专门的语法来更漂亮地实现面向对象编程,什么语法???

'''
学生对象1
    数据:

        名字 = "疯子"
        年龄 = 18
        性别 = "female"


学生对象2
    数据:

        名字 = "郭靖"
        年龄 = 19
        性别 = "male"


学生对象3
    数据:
        名字 = "大雕"
        年龄 = 200
        性别 = "male"


学生的类
    相同的数据
        学校 = "oldboy"
    相同的功能
        选课

'''


# 类体代码会在类定义阶段立刻执行,然后将产生的名字都丢到类的名称空间中
class Student:
    # 相同的数据
    school = "oldboy"

    # 相同的功能
    def choose(self):
        print("正在选课") 


    def __init__(obj, x, y, z):
        obj.name = x
        obj.age = y
        obj.gender = z
        # return None       __init__ 只能返回None

    # print('====>')


# 调用类
# 1、创建一个空对象与类相关
# 2、把空对象、"xxx", 18, "male"一起传给__init__方法,完成对象的初始化
# 3、赋值符号把初始化完成的对象的内存地址绑定变量名stu_obj1
stu_obj1 = Student('aaa', 18, 'male')
stu_obj2 = Student('bbb', 20, 'female')
stu_obj3 = Student('ccc', 22, 'male')


# stu_obj1.name = "疯子"  # stu1_obj1.__dict__["name"] = "冯疯子"
# stu_obj1.age = 18
# stu_obj1.gender = "female"
#
# stu_obj2.name = "郭靖"
# stu_obj2.age = 19
# stu_obj2.gender = "male"
#
# stu_obj3.name = "大雕"
# stu_obj3.age = 200
# stu_obj3.gender = "male"

# print(stu_obj1.name)
# stu_obj1.school = "xxx"
# print(stu_obj1.school)


# print(Student.__dict__)
print(stu_obj1.__dict__)
print(stu_obj2.name)
print(stu_obj3.age)



# 优先级
# 先从对象的字典里找,若没有,再去类的字典中找
# 1、类中定义的数据是直接共享给所有对象使用的
# 2、类中定义的函数是绑定给所有对象用的,绑定给谁就应该由哪个对象来调用
# '对象' + '.' + '绑定方法()' 会把对象当做第一个参数传入    stu_obj1.choose()
# '类' + '.' + '函数()' 相当于调用函数,没有自动传参的效果

# print(stu_obj1.choose)      # <bound method Student.choose of <__main__.Student object at 0x0000021632905A60>>
# print(Student.choose)       # <function Student.choose at 0x000002B23B495700>
stu_obj1.choose()
# Student.choose(123)

 

posted @ 2020-08-04 21:30  板鸭没有腿  阅读(40)  评论(0)    收藏  举报