"""注意:代码切勿照搬,错误请留言指出"""

 import re

 '''
class Person:
name='xxx'
age=20 p=Person() #p为实例对象
print(p.name,p.age)
p.name="yyy"
p.gender='male'
print(p.name,p.gender,p.age)
print(Person.name,Person.age)
#p(实例对象)对值得修改不影响Person类中的内容
Person.age='30'
print(Person.age)
#class Person (类) 对值得修改将该影响Person类中的内容
''' #访问权限(类的属性)
'''
class Person: #Person中的name和age公有的
name = 'james'
age=20
#在python中规定在前面加两个下划线,就变为私有的
'''
'''
class Person:
__name = 'james' #私有的__name
age = 20 def show(self): #self >> 自己
print(self.__name,self.age) #自己访问自己 正常返回 p=Person ()
p.show() #需要调用除show()函数,否则会拒绝class中的show的执行
print(Person.__name) # 访问类中的私有属性 异常返回
print(p.age)
#出现私有的函数调用时,结果同样如此!私有的函数,元素只能在class中被使用
#常用的方法就是通过调用公有的函数来执行函数内的私有属性的调用
''' #案例:编写个人信息并建立对象访问属性
'''
class Person:
name = 'xxx'
gender = 'x'
age = 0 p=Person()
print(p.name,p.gender,p.age)
print(Person.name,Person.gender,Person.age) p.name = 'A'
p.gender = 'Male'
p.age = 20 Person.name = 'B'
Person.gender = 'Female'
Person.age = 21 print(p.name,p.gender,p.age) #p实例对象属性
print(Person.name,Person.gender,Person.age) #Person类属性
''' #实例方法
'''
class Person:
age = 20
def show(self):
print (self.age) p.Person()
#实例方法至少有一个参数,一般以名为(self)的变量作为该参数(名称可自定义)
#实例方法通过实例对象调用,例如:p.show()
#如果使用类名称调用,需要人为传递实例参数,例如:Person.show(p)
#实例方法被调用是要向他的第一个参数传递实例对象
'''
'''
class Person:
name = 'james'
age = 12 def getName(self):
return self.name def getAge(self):
return self.age p=Person()
print(p.getName(),p.getAge()) #实例属性对象调用
print(Person.getAge(p)) #类名称调用
'''
'''
def show(self,s): #参数传递
print(self,s) p.show('hi') #'hi'值传递给s
Person.show(p,'hello') #hello 给 s''' #类方法
'''
class Person:
age = 20
@classmethod
def show(cls):
print(cls.age) p=Person()
'''
#类方法要使用 @classmethod 来修饰,而且第一个参数一般命名为cls(可另定名)
#类方法通常使用类的名称调用,例如:Person.show()
#类方法也可实例方法调用,例如:p.show()
#类方法调用时会向它的第一个参数传递类的名称
'''
class Person:
__name = 'james'
__age = 12 @classmethod
def show(self):
print(self)
print(self.__name,self.__age) Person.show()
p=Person()
p.show()''' #静态方法
'''
定义:
class Person:
age = 20
@staticmethod
def show():
print(Person.age) p = Person() #静态变量函数通过@staticmethod修饰
#通常采用类的名称或者实例来调用静态方法,例如:Person.show(),p.show()
#在调用静态函数时不会向函数传递任何参数
'''
'''
class Person:
__name = 'james'
__age = 12 @staticmethod
def show(): #静态不带参数
print(Person.__name) p = Person()
Person.show()
p.show()
''' #类、实例、静态方法 不同——Person
'''
class Person:
name = 'xxx'
gender = 'x'
age = 0
#实例方法
def instanceShow(self):
print(self.name,self.gender,self.age) @classmethod #类方法
def classShow(cls):
print(cls.name,cls.gender,cls.age) @staticmethod #静态方法
def staticShow():
print(Person.name,Person.gender,Person.age) p=Person()
p.instanceShow() #实例方法调用
Person.classShow() #类方法调用
Person.staticShow() #静态方法调用
'''
'''
实例方法一般用实例对象调用
类方法和静态方法一般用类名称调用
''' #对象初始化
'''
构造方法(函数)...>完成函数初始化
@ 构造方法__init__(self, ... )在生成对象时调用,
可以用来进行一些初始化操作,不需要显示去调用,系统默认执行
如果用户自己没有定义构造方法,系统就自己执行默认的额构造方法 class Person:
def __init__(self,n,a):
self.name=n
aelf.age=a p=Person('xxx',20)
print(p.name,p.age) @ 析构方法__del__(self)在释放对象时调用,可以在里面进行一些释放资源的操作
不需要显示调用 class Person:
def __init__(self,n,a):
self.name = n
self.age = a
def __del__(self):
print('__del__',self.name,self.age) p=Person('xxx',20)
print(p.name,p.age)
''''''
class Person:
def __init__(self):
print("__init__",self)
def __del__(self):
print("__del__",self) p=Person()''' #__init__完成对象初始化
'''
class Person:
def __init__(self,n,g,a): #n,g,a 传参单位
self.name = n
self.gender = g
self.age = a def show(self):
print(self.name,self.gender,self.age) p=Person('james','male',20) #p对象确定后,p对象的初始化(n,a,m)就完成了
p.show()
'''
#python规定:类中只能有一个构造函数
#...__init__中设置默认参数
'''
class Person:
def __init__(self,n='',g='male',a=0):
self.name = n
self.gender = g
self.age = a def show(self):
print(self.name,self.gender,self.age) a = Person('james')
b = Person('james','fenmale')
c = Person('james','male',20)
a.show() #结果:james male 0
b.show() #结果:james fenmale 0
c.show() #结果:james male 20
# __init__参数中如果设置了默认值,得到新的内容传参后则覆盖原值''' #案例:日期类 MyDate
'''
class MyDate:
__months = [0,31,28,31,30,31,30,31,31,30,31,30,31]
def __init__(self,y,m,d):
if (y<0):
print("Error:无效年份")
if (m<1 or m>12):
print("Error:无效月份")
if (y%400 == 0 or y%4 == 0 and y%100!=0):
MyDate.__months[2] = 29
else:
MyDate.__months[2] = 28 if d<1 or d>MyDate.__months[m]:
print("Error:无效日期")
#日期,月份,年份均合法后,创建类的属性(内容)
self.year = y
self.months = m
self.day = d
def show(self,end='\n'):
print("%d-%d-%d"%(self.year,self.months,self.day),end = end) p = MyDate(2018,11,19)
p.show()
''' #类的继承
#派生与继承:Student:name gender age
'''
class Person:
def __init__(self,name,gender,age):
self.name = name
self.gender = gender
self.age = age def show(self,end='\n'):
print(self.name,self.gender,self.age) class Student(Person):
def __init__(self,name,gender,age,major,dept):
Person.__init__(self,name,gender,age)
self.major = major
self.dept = dept def show(self):
Person.show(self,'')
print(self.major,self.dept) s = Student('james','male',20,'softwart','computer')
s.show()
'''
'''
结果:
james male 20
softwart computer
'''
#继承类构造函数:
'''
从上面的Strdent类的定义可以看除派生类的构造函数除了要完成自己的新增加的
major,dept属性的初始化外,还要调用基类的Person的构造函数,而且还要显示调用
即: Person.__init__(self,neme,gender,age)
通过类名称Person直接调用Person的__init__函数,并提供所要的4个函数
继承类时不会自动调用基类的构造函数的,必须显示调用
''' #属性方法的继承:
'''
如果一个基类中有一个实例方法,在继承类中也可以重新定义完全一样的实例方法。
例如 Person有show方法,在Student中也有一样的show方法,它们是不会混淆的
我们称Student类的show重写了Person的show
—当然,一个基类的实例方法也可以不被重写,派生类会继承这个基类的实例方法
-派生类也可以增加自己的新实例方法
'''
'''
class Person:
className = 'Person' #自己的实例属性
def __init__(self,name,gender,age):
self.name = name
self.gender = gender
self.age = age def show(self,end='\n'):
print(self.name,self.gender,self.age) @classmethod #类方法修饰
def classClassName(cls):
print(cls.className) @staticmethod #静态方法修饰
def staticClassName():
print(Person.className) def display(self):
print('display') class Student(Person):
#className = 'Student'
def __init__(self,name,gender,age,major,dept):
Person.__init__(self,name,gender,age)
self.major = major
self.dept = dept def show(self):
Person.show(self,'')
print(self.major,self.dept) s = Student('A','male',20,'software','computer')
s.show()
print(Student.className) #Student本身没有,则显示上一级(Person)
Student.classClassName()
Student.staticClassName() s.display() #实例调用
'''
#结果说明:Student继承了Person的实例、静态、类(属性)方法
#结果:
'''
A male 20
software computer
Person
Person
Person
display
''' #案例 :年月日 + 时分秒 class MyDate:
__months = [0,31,28,31,30,31,30,31,31,30,31,30,31]
def __init__(self,y,m,d):
if (y<0):
print("Error:无效年份")
if (m<1 or m>12):
print("Error:无效月份")
if (y%400 == 0 or y%4 == 0 and y%100!=0):
MyDate.__months[2] = 29
else:
MyDate.__months[2] = 28 if d<1 or d>MyDate.__months[m]:
print("Error:无效日期")
#日期,月份,年份均合法后,创建类的属性(内容)
self.year = y
self.months = m
self.day = d
def show(self,end='\n'):
print("%d-%d-%d"%(self.year,self.months,self.day),end = end) class MyDateTime(MyDate):
def __init__(self,y,mo,d,h,mi,s):
MyDate.__init__(self,y,mo,d)
if (h<0 or h>23 or mi<0 or mi>59 or s<0 or s>59):
print("Error:无效时间")
self.hour = h
self.minute = mi
self.second = s def show(self):
MyDate.show(self,'\t')
print("%d:%d:%d"%(self.hour,self.minute,self.second)) p = MyDateTime(2018,11,19,21,21,54)
p.show() #结果: 2018-11-19 21:21:54

python_面向对象—代码练习的更多相关文章

  1. Java面向对象-代码块

    Java面向对象-代码块 代码块主要就是通过{}花括号 括起来的代码: 主要分为 普通代码块 构造块 静态代码块三类.后面学到线程还有一个同步代码块,到时候再说: 普通代码块:仅仅是花括号括起来的代码 ...

  2. 前端学习:JS(面向对象)代码笔记

    前端学习:JS(面向对象)代码笔记 前端学习:JS面向对象知识学习(图解) 创建类和对象 创建对象方式1调用Object函数 <body> </body> <script ...

  3. python_面向对象编程

    一.编程范式 程序员通过特定的语法+数据结构+算法告诉计算机如果执行任务,实现这个过程有不同的编程方式,对这些不同的编程方式进行归纳总结得出来的编程方式类别,即为编程范式 编程范式:面向过程编程.面向 ...

  4. python_面向对象

    什么是面向对象? -- 一种主流编程范式,编程思维框架,世界主流两个方向,面向对象和面向过程. --  面向是把关注点集中一个具体东西,比如看向手机,也叫面向手机,手机就是一个对象,我们 把手机的属性 ...

  5. Python_面向对象_类1

    面向对象:减少重复代码,提高效率,比函数式编程更高效 类的创建: 实例属性又称:成员变量,成员属性(或者字段) 面向对象的三大特性: 一.封装 把客观事物封装为抽象的类,并对外只暴露一个可用接口 使用 ...

  6. python_面向对象魔法方法指南

    原文: http://www.rafekettler.com/magicmethods.html 原作者: Rafe Kettler 翻译: hit9 原版(英文版) Repo: https://gi ...

  7. python_面向对象进阶(7)

    第1章 面向对象特性—继承(补充) 1.1 接口类.抽象类介绍 1.2 接口类 1.3 接口类应用过程 1.3.1 第一版:完成多种支付方式接口 1.3.2 第二版: 归一化设计,统一支付方式 1.3 ...

  8. python_面向对象(6)

    第1章 递归函数 1.1 概述 1.2 练习 1.3 二分查找 第2章 面向对象•类 2.1 类的介绍 2.2 书写格式 2.3 类的属性 2.4 self介绍 2.5 类属性补充 2.6 调用查看静 ...

  9. Python_面向对象基础

    概念 类 一类抽象的事物,是描述了一类事物有哪些属性或者行为,但不是具体——模子. 实例 一个依托于类的规范存在的,被赋予了具体属性值的实际存在的物体. 对象 就是实例,实例的另外一个名称,相当于别名 ...

随机推荐

  1. Linq学习<二>

    http://www.cnblogs.com/wyqlijin/archive/2011/02/25/1964934.html 这位仁兄写的比较高深,建议大家看看 一: 这一篇以一个数据类为例,操作数 ...

  2. 编写高质量代码改善C#程序的157个建议——建议50:在Dispose模式中应区别对待托管资源和非托管资源

    建议50:在Dispose模式中应区别对待托管资源和非托管资源 真正资源释放代码的那个虚方法是带一个bool参数的,带这个参数,是因为我们在资源释放时要区别对待托管资源和非托管资源. 提供给调用者调用 ...

  3. leetcode N-Queens I && N-Queens II

    第一个的代码: #include<iostream> #include<vector> using namespace std; bool isLegal(int i, int ...

  4. 综合学生信息管理系统(JSP+JDBC)

    原创 通过JSP+JDBC制作一个简单的操作数据库中表信息的系统. 总体界面如下,一共有5个功能块. 功能一:列出全部学生 功能二:按条件查询学生 功能三:新添加学生 功能四:按条件删除学生 功能五: ...

  5. Android使用Canvas画图

    1.参考:http://blog.csdn.net/rhljiayou/article/details/7212620/ 2.常用方法: 1.Canvas类 drawArc 绘制弧 drawBitma ...

  6. mobiscroll_2.15.1

    var opt_sex = { theme: 'ios', lang: 'zh', formatValue: function (d) { return d.join(','); }, customW ...

  7. 关于 ASP.NET 的 CompilationMode="Never" 性能问题

    今天在优化系统性的时候,想到了 ASP.NET 里的 CompilationMode="Never", 因为用户控件里没有任何代码, 只有控件,把用户控件的编译模式改为 Never ...

  8. 21天学通C++学习笔记(二):C++程序的组成部分

    1. 预处理器编译指令 预处理器是一个在编译前运行的工具. 预处理器编译指令是向预处理器发出的命令,总是以磅字符#大头. #include让预处理器获取指定文件并将它们放在编译指令所处的位置.#inc ...

  9. ecliplse启动慢的优化方法(亲测有效)

    本人使用的ecliplse IDE 版本是: Version: Photon Release (4.8.0)Build id: 20180619-1200 我的电脑配置是 Ecliplse启动差不多一 ...

  10. C# WPF Webbrowser 强制所有网页链接在同一页面打开

    只要搞懂Winform的  WPF稍微改一改就可以了 主类:负责跳转的 using System; using System.Collections.Generic; using System.Com ...