python-面向对象的程序设计
面向对象
# name='元昊'
#
# gender='母'
#
# type='藏獒'
#狗的特征
dog1={
'name':'元昊',
'gender':'母',
'type':'藏獒'
}
dog2={
'name':'alex',
'gender':'母',
'type':'腊肠',
}
person1={
'name':'武sir',
'gender':'母',
'type':'人'
}
# def dog(name,gender,type):
# # 狗的动作
# def jiao(dog):
# print('一条狗[%s],汪汪汪' % dog['name'])
# def chi_shi(dog):
# print('一条[%s] 正在吃屎' % dog['type'])
# dog1 = {
# 'name':name,
# 'gender': gender,
# 'type': type,
# 'jiao':jiao,
# 'chi_shi':chi_shi,
# }
# return dog1
# d1=dog('元昊','母','中华田园犬')
# d2=dog('alex','母','藏敖')
# print(d1)
# print(d2)
# d1['jiao'](d1)
# d2['chi_shi'](d2)
# jiao(dog1)
# chi_shi(dog1)
# chi_shi(dog2)
#
# jiao(person1)
def dog(name,gender,type):
# 狗的动作
def jiao(dog):
print('一条狗[%s],汪汪汪' % dog['name'])
def chi_shi(dog):
print('一条[%s] 正在吃屎' % dog['type'])
def init(name,gender,type):
dog1 = {
'name':name,
'gender': gender,
'type': type,
'jiao':jiao,
'chi_shi':chi_shi,
}
return dog1
return init(name,gender,type)
d1=dog('元昊','母','中华田园犬')
d2=dog('alex','母','藏敖')
print(d1)
print(d2)
d1['jiao'](d1)
d2['chi_shi'](d2)
def dog(name,gender,type):
def init(name,gender,type):
dog1={ 'name':name,
'gender':gender,
'type':type,
'jiao':jiao,
'chi_shi':chi_shi}
return dog1
def jiao(dog): 调用自身
print('%s汪汪汪'%dog['name'])
def chi_shi(dog):
print('什么狗%s吃屎'%dog['type'])
return init(name,gender,type)
d1=dog('旺财','公','菜狗')
print(d1)
d1['jiao'](d1) 注意这里
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
{'name': '旺财', 'gender': '公', 'type': '菜狗', 'jiao': <function dog.<locals>.jiao at 0x000002172D3EFEA0>, 'chi_shi': <function dog.<locals>.chi_shi at 0x000002172D3EFAE8>}
旺财汪汪汪
面向对象的展示
#用面向对象编程独有的语法class去实现面向对象设计
class Dog:
def __init__(self,name,gender,type):
self.name=name
self.gender=gender
self.type=type
def bark(self):
print('一条名字为[%s]的[%s],狂吠不止' %(self.name,self.type))
def yao_ren(self):
print('[%s]正在咬人' %(self.name))
def chi_shi(self):
print('[%s]正在吃屎' %(self.type))
dog1=Dog('alex','female','京巴')
print(dog1.__dict__)
# dog2=Dog('wupeiqi','female','腊肠')
# dog3=Dog('yuanhao','female','藏獒')
#
# dog1.bark()
# dog2.yao_ren()
# dog3.chi_shi()
面向对象的设计练习
def school(name,addr,type):
def init(name, addr, type):
sch = {
'name': name,
'addr': addr,
'type': type,
'kao_shi': kao_shi,
'zhao_sheng': zhao_sheng,
}
return sch
def kao_shi(school):
print('%s 学校正在考试' %school['name'])
def zhao_sheng(school):
print('%s %s 正在招生' %(school['type'],school['name']))
return init(name,addr,type)
s1=school('oldboy','沙河','私立学校')
print(s1)
print(s1['name'])
s1['zhao_sheng'](s1)
s2=school('清华','北京','公立学校')
print(s2)
print(s2['name'],s2['addr'],s2['type'])
s2['zhao_sheng'](s2)
类相关知识
# class Chinese:
# '这是一个中国人的类'
# pass
#
# print(Chinese)
#
# #实例化到底干了什么?
# p1=Chinese() #实例化
# print(p1)
属性:
类是用来描述一类事物,类的对象指的是这一类事物的一个个体
是事物就要有属性,属性分为,
1.数据属性:就是变量
2.函数属性:就是函数,再面向对象里通常成为方法
注意:类和对象均用来访问自己的属性
'''
1.数据属性
2.函数属性
'''
class Chinese:
'这是一个中国人的类'
dang='党'
def du_tan():
print('朝着墙上就是一口痰')
def cha_dui(self):
print('插到了前面')
print(Chinese.dang)
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
党
print(Chinese.__dict__['du_tan']())
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
朝着墙上就是一口痰
None
print(dir(Chinese)) #打印出数据属性,函数属性的值,以及系统自身的属性
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'cha_dui', 'dang', 'du_tan']
print(Chinese.__dict__) #查看类的属性字典
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
{'__module__': '__main__', 'dang': '党', 'du_tan': <function Chinese.du_tan at 0x000002509015FB70>, 'cha_dui': <function Chinese.cha_dui at 0x000002509015FEA0>, '__dict__': <attribute '__dict__' of 'Chinese' objects>, '__weakref__': <attribute '__weakref__' of 'Chinese' objects>, '__doc__': None}
print(Chinese.__dict__['dang'])
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
党
Chinese.__dict__['du_tan']('aa') #'aa'随便一个值,只是一个位置变量
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
朝着墙上就是一口痰
print(Chinese.__name__) #显示类名
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
Chinese
print(Chinese.__doc__) #显示类的文档
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
None
print(Chinese.__module__) #显示这个类再哪个模块
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/test1/sss.py"
__main__
对象相关知识
'''
1.数据属性
2.函数属性
'''
class Chinese:
'这是一个中国人的类'
dang='党'
def __init__(self,name,age,gender):
# print('我是初始化函数,我开始运行了')
self.mingzi=name #p1.mingzi=name
self.nianji=age #p1.nianji=age
self.xingbie=gender
# print('我结束啦')
def sui_di_tu_tan(self):
print('%s 朝着墙上就是一口痰' %self.mingzi)
def cha_dui(self):
print(self)
print('%s 插到了前面' %self.mingzi)
def eat_food(self,food):
print('%s 正在吃%s' %(self.mingzi,food))
p1=Chinese('元昊',18,'female') #--->__init__(self,name,age,gender)
p1.sui_di_tu_tan()
p1.eat_food('屎')
p2=Chinese('武sir',10000,'姑娘')
p2.eat_food('韭菜馅饼')
print(dir(p2))
#
# # p1=Chinese.__init__(p1,name,age,gender)
#
# print(p1.__dict__)
# # print(p1.__dict__['xingbie'])
# print(p1.mingzi)
# # print(p1.mingzi111111111111111)
#
# print(p1.dang)
#
#
# print(Chinese.__dict__)
# Chinese.sui_di_tu_tan()
# Chinese.cha_dui(p1)
#
# # p1.sui_di_tu_tan()
#
# print('[------------------->')
# p1.cha_dui()
类属性增删该查
class Chinese:
country='China'
def __init__(self,name):
self.name=name
def play_ball(self,ball):
print('%s 正在打 %s' %(self.name))
#查看
print(Chinese.country)
#修改
Chinese.country='Japan'
print(Chinese.country)
p1=Chinese('alex')
print(p1.__dict__)
print(p1.country)
#增加
Chinese.dang='党'
# print(Chinese.dang)
# print(p1.dang)
#删除
del Chinese.dang
del Chinese.country
print(Chinese.__dict__)
# print(Chinese.country)
#增加函数属性
def eat_food(self,food):
print('%s 正在吃%s' %(self.name,food))
Chinese.eat=eat_food
print(Chinese.__dict__)
p1.eat('屎')
#修改函数属性,跟数据属性一样
def test(self):
print('test')
Chinese.play_ball=test
p1.play_ball()# Chinese.play_ball(p1)
#删除函数属性
del Chinese.tu_dan
s1.tu_dan()
实例属性增删该查
class Chinese:
country='China'
def __init__(self,name):
self.name=name
def play_ball(self,ball):
print('%s 正在打 %s' %(self.name,ball))
p1=Chinese('alex')
print(p1.__dict__)
#查看
# print(p1.name)
# print(p1.play_ball)
#增加
p1.age=18
print(p1.__dict__)
print(p1.age)
#不要修改底层的属性字典
# p1.__dict__['sex']='male'
# print(p1.__dict__)
# print(p1.sex)
#修改
p1.age=19
print(p1.__dict__)
print(p1.age)
#删除
del p1.age
print(p1.__dict__)
# class Chinese:
# country='China'
# def __init__(self,name):
# self.name=name
#
# def play_ball(self,ball):
# print('%s 正在打 %s' %(self.name,ball))
# p1=Chinese('alex')
#
# print(p1.country)
# p1.country='Japan'
# print(Chinese.country)
class Chinese:
country='China'
l=['a','b']
def __init__(self,name):
self.name=name
def play_ball(self,ball):
print('%s 正在打 %s' %(self.name,ball))
p1=Chinese('alex')
print(p1.l)
# p1.l=[1,2,3] #将实例p1的l列表改变,
# print(Chinese.l) #类本身没有改变
# print(p1.__dict__)
"D:\pycharm new project\venv\Scripts\python.exe" "D:/pycharm new project/day22/1.py"
['a', 'b']
['a', 'b']
{'name': 'alex', 'l': [1, 2, 3]
#P1.l就是在调用类的属性,然后再append就是修改类的属性,跟 p1.l=[1,2,3]有本质的区别,=相当于新增一个属性。
p1.l.append('c')
print(p1.__dict__)
print(Chinese.l)
{'name': 'alex', 'l': [1, 2, 3, 'c']}
['a', 'b']
回顾
class School:
x=1
def __init__(self,name,addr,type):
self.Name=name
self.Addr=addr
self.Type=type
def tell_info(self):
print('学校的详细信息是:name:%s addr:%s' %(self.Name,self.Addr))
s1=School('oldboy','沙河','私立')
print(s1.__dict__) #实例只有自己本身的属性
{'Name': 'oldboy', 'Addr': '沙河', 'Type': '私立'}
print(School.__dict__)
{'__module__': '__main__', 'x': 1, '__init__': <function School.__init__ at 0x000002CD7F77FB70>, 'tell_info': <function School.tell_info at 0x000002CD7F77FEA0>, '__dict__': <attribute '__dict__' of 'School' objects>, '__weakref__': <attribute '__weakref__' of 'School' objects>, '__doc__': None}
s1.tell_info() #实例调用函数属性,不用传自己,默认已经传了自己
学校的详细信息是:name:oldboy addr:沙河
School.tell_info(s1) #但是类调用自己的函数属性,需要传实例
学校的详细信息是:name:oldboy addr:沙河

浙公网安备 33010602011771号