Pyhton学习——Day24
# #面向对象设计:
# def dog(name,gender,type):
# def jiao(dog):
# print('One Dog[%s],wfwfwf'%dog['name'])
# def walk(dog):
# print('One Dog[%s] walking ' %dog['name'])
# def init(name,gender,type):
# dog1 = {
# 'name':name,
# 'gender':gender,
# 'type':type,
# 'jiao':jiao,
# 'walk':walk,
# }
# return dog1
# return init(name,gender,type)
# d1 = dog('pandaboy','male','big')
# d2 = dog('pandaboy1','female','small')
# print(d1)
# print(d2)
# d1['jiao'](d1)
# d2['walk'](d2)
#########################################################################################################
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日学习打卡/Day24.py
# {'name': 'pandaboy', 'gender': 'male', 'type': 'big', 'jiao': <function dog.<locals>.jiao at 0x00000000029CA6A8>, 'walk': <function dog.<locals>.walk at 0x00000000029CA730>}
# {'name': 'pandaboy1', 'gender': 'female', 'type': 'small', 'jiao': <function dog.<locals>.jiao at 0x00000000029CA7B8>, 'walk': <function dog.<locals>.walk at 0x00000000029CA840>}
# One Dog[pandaboy],wfwfwf
# One Dog[pandaboy1] walking
#
# Process finished with exit code 0
#######################################################################################################################
# 类的定义:把一类事物的相同特征和动作整合到一起就是类,类是一个抽象的概念
# 对象:就是一个具体的事物存在,基于类而创建的一个具体的事物,具体存在的,也就是动作和特征整合到一起
# 学校类:
# 特征:name,addr,type
# 动作:考试,招生,开除学生
# def school(name,addr,type):
# def init(name, addr, type):
# sch = {
# 'name': name,
# 'addr': addr,
# 'type': type,
# 'test': test,
# 'employ': employ,
# }
# return sch
# def test(school):
# print('%s学校正在考试'%school['name'])
# def employ(school):
# print('%s %s 正在招生'%(school['type'],school['name']))
# return init(name,addr,type) #初始化函数
# s1 = school('oldboy','地址','类型')
# print(s1)
# s1['test'](s1)
# s1['employ'](s1)
# 自我总结:1.先写类(写出类事物的共有特征和共有的动作);2.写对象的属性(对象的特征)[赋予return值];3.定义各项动作函数
#——————————————————————————————————————————————————————————#
#用面向对象编程独有的语法class去实现面向对象设计,self就是面向对象自己
# class Dog: 不用设计return值,本质就是执行了初始化值
#小结:
#一门面向对象的语言不一定会强制写OO程序,例如C++可以被认为更好的“C”,而Java则要求万物皆为类,此外还规定,一个源文件对应一个类文件
# 在Python中,类和OOp都不是日常编程所必须的,尽管它从一开始设计就是面向对象,并且结构上支持OOP,但是pyhon没有限定或要求在应用中写OO的代码
# 用面向对象的语言写程序,和一个程序的设计是面向对象的,这是两个完全不同的概念
#——————————————————————————————————————————————————————————
# 什么是类,什么是对象?
# 类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体
# 类和对象的区别?
# 那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看
# 在现实世界中:先有对象,再有类
# 在程序中:务必保证先定义类,后产生对象
# 实例化:由类生产的对象的过程就是实例化
#在python中声明函数和声明类很相似
# 声明函数
# def 函数名字(我是参数):
# '函数文档字符串'
# 函数体
#——————————#
# 声明类(可以没有函数的括号)
# class 类名:
# '类的文档字符串'
# 类体
#——————————#
# class Chinese:
# '这是一个中国人的类'
# pass
# print(Chinese)
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日学习打卡/Day24.py
# <class '__main__.Chinese'> 文件类型:class 模块名:__main__
#
# Process finished with exit code 0
#——————————#
# 实例化(类+加括号)
# 新式类:所有的类都必须加object class Chinese(object)表示继承了object对象
#——————————————————————————————————————————————————————#
# 属性
# 类是用来描述一类事物,类的对象指的是这一类事物中的一个个体
# 是事物就要有属性,属性分为:1.数据属性,即变量;2.函数属性:就是函数,在面向对象里通常称为方法
# 注意:类和对象均用点来访问自己的属性
# class Chinese:
# '这是一个中国人的类'
# government = '***'
# def handsome(self):
# print('so handsome')
# print(Chinese.government)
# Chinese.handsome('目的只是为了传送值')
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日学习打卡/Day24.py
# ***
# so handsome
#
# Process finished with exit code 0
#——————————————————————————————————————————————————————#
# 类的其他属性内容
# 所有的类都有源头:object
# print(Chinese.__name__)#类名
# print(Chinese.__doc__)#文档
# print(Chinese.__bases__)#元祖显示object
# print(Chinese.__module__)#类定义所在模块
# 实例化:调用了__init__的内容,实例只有数据属性,没有函数属性
# class Chinese:
# '这是一个中国人的类'
# government = '***'
# def __init__(name,age,gender):
# dic = {
# 'name':name,
# 'age':age,
# 'gender':gender,
# }
# return dic
# def __init__(self,name,age,gender):
# print('我是初始化函数,我开始运行')
# self.name = name
# self.age = age
# self.gender =gender
# print('初始化函数运行完毕')
# def handsome(self):
# print('so handsome')
# def work(self):
# print('work work')
# # return init(name,age,gender) class自动return
# p1 = Chinese('pandaboy',18,'male')
# print(p1.__dict__)
# 类有类的属性字典,实例有实例的属性字典,实例没有函数属性
# 总结 定义了self会自动,实例一定能访问类属性,但是类属性不能访问实例属性
# 类 实例
# | |
# dang = 'gong' self.mingzi = 'name'
# def __init__(self,name,age) /
# def method()
# 实例化的过程实际就是执行__init__的过程,这个函数内部只是为实例本身即self设定了一堆变量,所以实例只有数据属性
# 1.实例只有数据属性(实例的函数属性严格来说是类的函数属性)
# 2.def实例/对象,只是回收了实例的数据属性,函数属性是属于类的,不会回收
# 3.实例调用的方法是在类里去找的
#——————————————————————————————————————————————#
# 练习:编写一个学生类,产生一堆学生对象,要求有一个计数器(属性),统计总共实例了多少个对象
#——————————————————————————————————————————————#
# 类属性又称为静态变量,或者是静态数据,这些数据是与它们所属的类对象绑定的,不依赖与任何类实例,C++和Java要加上static
# class Chinese:
# country = 'China'
# def __init__(self,name):
# self.name = name
# def play_ball(self,ball):
# print('%s 正在玩 %s' %(self.name))
# def say_word(self,word):
# print('%s 说 %s' %(self,word))
#查看类属性
# print(Chinese.country)
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日学习打卡/Day24.py
# China
#
# Process finished with exit code 0
###################################################################################################
# 修改类属性
# Chinese.country = 'CHINA'
# print(Chinese.country)
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日学习打卡/Day24.py
# CHINA
#
# Process finished with exit code 0
###################################################################################################
# 增加类属性
# Chinese.dang ='派别'
# print(Chinese.dang)
# p1 = Chinese.dang
# print(p1)
# F:\Python\PythonLeaning\venv\Scripts\python.exe F:/Python/PythonLeaning/每日学习打卡/Day24.py
# 派别
# 派别
# Process finished with exit code 0
###################################################################################################
# 删除
# del Chinese.country
###################################################################################################
# class Chinese:
# country = 'China'
# def __init__(self,name):
# self.name = name
# def play_ball(self,ball):
# print('%s 正在玩 %s' %(self.name,ball))
# def say_word(self,word):
# print('%s 说 %s' %(self,word))
# p1 = Chinese('alex')
# print(p1.__dict__)
# 查看
# print(p1.name)
# p1.play_ball('篮球') #实际是访问的类的属性
#增加
# p1.age = 18
# print(p1.__dict__)
# print(p1.age)
#不要修改字典的底层结构
Win a contest, win a challenge
posted on 2018-02-27 16:14 pandaboy1123 阅读(158) 评论(0) 编辑 收藏 举报