python开发学习 day24 面向对象

www.cnblogs.com/linhaifeng/articles/6182264.html

http://egon09.bolg.51cto.com/9161406/1842475

 

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

  类是一个抽象的概念

 

对象:就是基于类而创建的一个具体的事物(具体存在的)

   特征和动作的整合

 

一、面向对象编程 示例

# 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)
View Code
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)
View Code

 

二、面向对象 的展示

#用面向对象编程独有的语法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()
View Code

 

三、函数 与 类的声明

函数与类的声明相似

 

#函数的声明

def functionName(args):

  '函数文档字串'

  函数体
View Code

 

----

类的声明.     ----规范 类名首字母大写

'''

class 类名:

  '类的文档字串'

  类体

'''

#我们创建一个类

class Data:
pass

#用类的Data实例出一个对象d1
d1=Data()
View Code

 

四、经典类和新式类

大前提

1.只有在python2中才分经典类和新式类,在3中统一都是新式类

2.新式类和经典类声明的最大不同在于,所有新式类必须继承至少一个父类

3.所有类甭管是否显示声明父类,都有一个默认继承object父类(先记住,讲继承时会讲)

 

在python2中的区分

经典类

class 类名:

  pass

----

新式类

class 类名(父类):

  pass

-----

在3中,上面两种方式都是新式类

 

五、属性

类是用来描述一类事物,类的对象指的是这一类事物中的一个个体

是事物就要有属性,属性分为:

1.数据属性: 即变量

2.函数属性:即函数,在面向对象里通常称为方法

注意:类和对象均用点来访问自己的属性

 

5.1

---类的相关知识


# class Chinese:
#     '这是一个中国人的类'
#     pass
#
# print(Chinese)
#
# #实例化到底干了什么?
# p1=Chinese() #实例化
# print(p1)


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

class Chinese:
    '这是一个中国人的类'
    dang='共产'
    def sui_di_tu_tan():
        print('朝着墙上就是一口痰')
    def cha_dui(self):
        print('插到了前面')
#
# print(Chinese.dang)
# Chinese.sui_di_tu_tan()
# Chinese.cha_dui('元昊')
#
# # print(dir(Chinese))
# # print(Chinese.__dict__) #查看属性字典
# print(Chinese.__dict__['dang'])
# Chinese.__dict__['sui_di_tu_tan']()
# Chinese.__dict__['cha_dui'](1)
print(Chinese.__name__)
print(Chinese.__doc__)
print(Chinese.__module__)

 ===================================

 

 5.2

查看类的属性

dir() 查出的是一个名字列表

类名.__dict__:查处的是一个字典,key为属性名,value为属性值

 

 ===================================

 

特殊的类属性

chinese.__name__

chinese.__doc__

chinese.__module__

 ===================================

实例化

p1=chinese()

 

构造函数

类是数据属性和函数属性的结合,描述的是一类事物

这类事物的具体表现就是一个实例\对象,比方说中国人是一个类,而你就是这个类的实例

你除了有中国人这个数据属性外,还有名字,年龄,性别等数据属性

如何为实例定制数据属性,可以使用一个内置方法__init__(),该方法,在类()实例化时会自动执行

class ChinesePeople:
    '我们是中国人,我们骄傲的活着,我们不服任何事和物'
    giverment='共_'

    def __init__(self, name,age,gender): #实例化的过程可以简单的理解为执行该函数的过程,实例本身会当作参数传递给self(这是默认的步骤)
        self.name=name
        self.age=age
        self.gender=gender
    
    def su_di_tu_tan():
        print('90%的中国人都喜欢随地吐痰')

    def cha_dui(self):
        print('一个中国人-->%s<--插到了前面' %self)

#person1= ChinesePeople() #会报错
                                          #自动执行__init__方法,而这个需要参数
                                           #这些参数应该写在类名后面的括号里,然后由
                                            #类传给__init__函数,也就是说,传给类的参数
                                               #就是传给__init__的参数

person1= ChinesePeople('alex','100','female')

print(person1.__dict__)
View Code

 

====================

5.3  类属性与对象(实例)属性

正本清源::有人说实例是类产生的,所以实例肯定能访问到类的属性,然后就没有说为什么-----大大大傻逼===》类的作用域(同函数)

属性有增删改查

类属性的增删改查

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__)
View Code

 

实例属性的增删改查

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__)
View Code

 

 就不信玩不蒙你

# 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='日本'
# print('类的--->',Chinese.country)
# print('实例的',p1.country)


# country='中国'
# class Chinese:
#     def __init__(self,name):
#         self.name=name
#
#     def play_ball(self,ball):
#         print('%s 正在打 %s' %(self.name,ball))
# p1=Chinese('alex')
# # print(p1.country)



# country='中国'
# class Chinese:
#     def __init__(self,name):
#         self.name=name
#
#     def play_ball(self,ball):
#         print('%s 正在打 %s' %(self.name,ball))
#
# def shi_li_hua():
#     name=input('>>: ')
#     p1=Chinese(name)
#     # print(p1.country)
#     print(p1.name)
# shi_li_hua()



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

    def play_ball(self,ball):
        print('%s 正在打 %s' %(self.name,ball))

print(Chinese.__dict__)
print(Chinese.country)
p1=Chinese('alex')
# print('实例--------》',p1.country)



# Chinese.
# p.
View Code

 

换个姿势搞你

# 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]
# print(Chinese.l)
# print(p1.__dict__)
p1.l.append('c')
print(p1.__dict__)
print(Chinese.l)
View Code

 

 

 

 

posted @ 2018-12-03 19:35  apoorgod  阅读(89)  评论(0)    收藏  举报