博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面向对象基础
阅读量:5310 次
发布时间:2019-06-14

本文共 3985 字,大约阅读时间需要 13 分钟。

由面向对象的思想引入面向对象的设计,最后面向对象编程。

#!/usr/bin/env python# coding:utf-8def 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)print("面向对象的设计")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)

 

类的练习二:

#!/usr/bin/env python# coding:utf-8class Chinese:    '''这里写文档注释'''    area = "Asia"    # def init(name,age,gender):    #     dic={    #         'name':name,    #         'age':age,    #         'gender':gender    #     }    #     return dic    def __init__(self, name, age, gender):        print("start...")        self.aname = name        self.aage = age        self.agender = gender        print("end...")        ## 自动return None 所以,不能加return    def dun(self):        print("%s 亚洲蹲在 %s " % (self.aname,self.area))    def speak(self,lang):        print("%s 讲%s " % (self.aname, lang))p1 = Chinese("Tom",22,"male")  # 实例化print(p1.__dict__) #查看实例的字典print(p1.aname)print(p1.agender)print(p1.area)p1.dun()p1.speak('本地方言')print(p1.area)# 修改Chinese.area = '东方大陆'# 修改函数def xia_dun(self):    print("%s 坐在了地上。" % self.aname)Chinese.dun = xia_dun  # 修改了类的内部函数# 增加Chinese.skin = 'yellow'p2 = Chinese("小明",11,"男")print(p2.area)print(p2.skin)print(p1.skin) # 之前的实例也可以用,因为实例是对类的引用p2.dun()# 删除# del Chinese.area# print(p2.area)

 

类的数据属性和函数属性:(这个说法不同于C# Java PHP)

#!/usr/bin/env python# coding:utf-8## 类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念## 对象:就是基于类而创建的一个具体的事物(具体存在的)也是特征和动作整合到一起# class Chinese: # 经典类 python2中的区分#     '''这是一个中国人的类'''#     pass## print(Chinese)### class Chinese(object): # 新式类 python2中的区分#     pass# 实例化到底干了什么?# p1 = Chinese()  # 实例化 并不像其它语言使用new# print(p1)## python3中不再区分,都是新式类class Chinese:    '''这里写文档注释'''    # 1 数据属性    area = "Asia"    # 2 函数属性    def dun():        print("亚洲蹲")    def speak(self):        print("讲汉语 %s" % self)print(dir(Chinese))print(Chinese.__dict__)  # 查看类的属性字典,字典里存放着类的数据属性和函数属性print(Chinese.area)Chinese.dun()  # 直接执行类中的函数Chinese.__dict__['dun']()  # 通过字典方式调用类中函数Chinese.__dict__['speak']("你好")print(Chinese.__name__)  # 类名print(Chinese.__doc__)  # 类的文档注释print(Chinese.__base__)  # 基类 
print(Chinese.__bases__) # 基类 (
)print(Chinese.__module__) # 来自模块

 

面向对象应该分清楚实例和类:

#!/usr/bin/env python# coding:utf-8class Chinese:    '''这里写文档注释'''    country = "China"    def __init__(self, name):        self.aname = name    def speak(self,lang):        print("%s 讲%s " % (self.aname, lang))p1 = Chinese('alex')print(p1.__dict__)# 查看print(p1.speak)  # 只得到实例中函数的内存地址p1.speak('汉语')# 增加实例中的属性p1.age = 18print(p1.__dict__)print(p1.age)## 不要修改实例的函数属性,虽然可以操作。因为不规范## 可以通过__dict__的方式更改字典,但是也不建议这么做,因为不稳定。# 删除del p1.ageprint(p1.__dict__)## 分清类和实例p1.country = "zh"print(Chinese.country) # 这是类的print(p1.country)  # 这是实例的

 

老师http://www.cnblogs.com/linhaifeng/articles/6182264.html

分清类和实例操作的例子:

#!/usr/bin/env python# coding:utf-8country = "中国"class Chinese:    '''这里写文档注释'''    country = "China"    li = ['a','b']    def __init__(self,name):        self.name = name        print('-----------------',country) # 这里的country只相当于普通的变量,跟类没有关系,因为没有通过点来调用        # self.name = input("请输入用户名:") # 不建议在函数中使用输入输出。 混乱,可读性差    def speak(self,lang):        print("%s 讲%s " % (self.aname, lang))p1 = Chinese('alex')print("实例内调用", p1.country)  # 点的方式调用是从类的内部print("类调用", Chinese.country)print(p1.li)# p1.li = [1,2,3]  # 实例的list被重新赋值# print(p1.__dict__)  # 返回{'name': 'alex', 'li': [1, 2, 3]}# print(Chinese.li)  # 返回 ['a', 'b']p1.li.append('c') # 附加了类中列表的元素print(p1.__dict__)  # 实例的字典中没有 li 这个列表print(Chinese.li)  # 类的列表被添加内容

转载于:https://www.cnblogs.com/FHBIAO/p/10174497.html

你可能感兴趣的文章
Hallo wolrd!
查看>>
16下学期进度条2
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
Chapter 3 Phenomenon——12
查看>>
和小哥哥一起刷洛谷(1)
查看>>
遇麻烦,Win7+Ubuntu12.10+Archlinux12.10 +grub
查看>>
SqlBulkCopy大批量导入数据
查看>>
pandas 修改指定列中所有内容
查看>>
「 Luogu P2285 」打鼹鼠
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
开发进度一
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>