python学习(十四)——面向对象

一、面向对象

1、三种编程风格

(1)面向过程编程

(2)函数式编程

(3)面向对象便编程

2、类:把一类事物的相同特征和动作整合到一起

3、对象:基于类而创建的一个具体的事物,也就是特征和动作整合到一起

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去实现面向对象设计
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','京巴')

1、类相关知识

(1)经典类

class Chinese:
    '这是一个类'
    pass

print(Chinese)

# 实例化到底干了什么?
p1=Chinese() # 实例化
print(p1)

(2)新式类

class Chinese(object):
    pass

# 在python3中两种类是一样的

(3)属性

'''
1.数据属性
2.函数属性
'''

class Chinese:
    '这是一个的类'
    sx='人'
    def ai_guo():
        print('爱国')
    def tuan_jie(self):
        print('团结')

print(Chinese.sx)
Chinese.ai_guo()

print(dir(Chinese))
print(Chinese.__dict__)  # 查看类的属性字典

#------------------------------类的方法-----------------------------------
print(Chinese.__name__)
print(Chinese.__doc__)
print(Chinese.__bases__)
print(Chinese.__module__)

(4)初始化函数__init__ -不能写返回值

class Chinese:
    '这是一个的类'
    sx='人'
    # def __init__(name, age, gender):
    #     dic = {
    #         'name':name,
    #         'age':age,
    #         'gender':gender
    #     }
    def __init__(self, name, age, gender):
        self.mingzi = name
        self.nianji = age
        self.xingbie = gender
    def ai_guo():
        print('爱国')
    def tuan_jie(self):
        print('%s团结' %self.mingzi)


p1 = Chinese('asd', 18, 'male')
print(p1.__dict__)

# 调用
print(p1.__dict__['mingzi'])
print(p1.mingzi)
print(p1.sx)
Chinese.tuan_jie(p1)class Chinese:
    '这是一个的类'
    sx='人'
    # def __init__(name, age, gender):
    #     dic = {
    #         'name':name,
    #         'age':age,
    #         'gender':gender
    #     }
    def __init__(self, name, age, gender):
        self.mingzi = name
        self.nianji = age
        self.xingbie = gender
    def ai_guo():
        print('爱国')
    def tuan_jie(self):
        print('团结')

p1 = Chinese('asd', 18, 'male')
print(p1.__dict__)

# 调用
print(p1.__dict__['mingzi'])
print(p1.mingzi)

(5)类的增删改查

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='CHINA'
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)

(6)实例属性的增删改查

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)

# 纯属多余,忘记即可
# def test(self):
#     print('来自实例函数属性')
# 
# p1.test = test
# print(p1.__dict__)

#不要修改底层的属性字典-不要这么做
#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='CHA'
print('类的--->',Chinese.country)  # 类的属性不变,只变实例的属性
print('实例的',p1.country)

#-----------------------------作用域----------------------------
country='中国-------------------'
class Chinese:
    country='中国'
    def __init__(self,name):
        self.name=name
        print('--->',country)

p1 = Chinese('asd')     # 输出 中国-------------------
print(Chinese.__dict__)
print(Chinese.country)  # 用. 调用是类,不用则跟类没关系

猜你喜欢

转载自blog.csdn.net/qq_28334183/article/details/83038807