对象,是对事物的抽象,包含了事物的一些属性,和动作。

类示例

class Person(object):# 定义基本属性, 外部可访问name = ''# 定义保护属性,只有类本身和子类可以访问_sex = 'male'# 定义私有属性,只有类本身可以访问__weight = 0# __init__是一个特殊方法用于在创建对象时进行初始化操作# 通过这个方法我们可以为学生对象绑定name和age两个属性def __init__(self, name, age):self.name = nameself.age = age# 方法之间要空出一行(编码规范)def speak(self, message):print("%s 说: %d。" % (self.name, message))# 方法名用全小写多个单词用下划线连接(编码规范)def watch_av(self):if self.age < 18:print('%s只能观看《熊出没》.' % self.name)else:print('%s正在观看动作片.' % self.name)# 和上面代码有缩进差别,要空出两行(编码规范)
def main():# 创建Person对象并指定姓名和年龄p1 = Person('骆昊', 38)# 调用对象方法speak, 并传入参数p1.speak('我要学Python')# 调用对象方法 watch_avp1.watch_av()

继承

class Student(Person):grade = ''# 子类的构造函数def __init__(self, n, a, g):# 调用父类的构造函数Person.__init__(self, n, a)self.grade = g# 覆写父类的方法def speak(self, message):print("%s 说: %d ,我已经在读 %d 年级" % (self.name, message, self.grade))def main2():# 创建学生对象并指定姓名和年龄stu1 = Student('王峰', 18)# 调用对象方法speak, 并传入参数, 因为复写了父类方法,所以以子类格式输出stu1.speak('我要学Python')

@property装饰器

@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便.

把一个getter方法变成属性,只需要加上@property。 此时,@property本身又创建了另一个装饰器@age.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作:

class Person(object):def __init__(self, name, age):self._name = nameself._age = age# 访问器 - getter方法
    @propertydef name(self):return self._name# 访问器 - getter方法
    @propertydef age(self):return self._age# 修改器 - setter方法
    @age.setterdef age(self, age):self._age = agedef play(self):if self._age <= 16:print('%s正在玩飞行棋.' % self._name)else:print('%s正在玩斗地主.' % self._name)def main():person = Person('王大锤', 12)person.play()person.age = 22

__slots__

class Cat(object):passdef test():cat = Cat()cat.name = "小黑"print(cat.name)# python 是动态语言,所以类Cat 没有任何属性, 当赋值后也会新创建一个属性
test()

为了限制类只能使用自己想要得几个属性,可以使用__slots__

class Cat(object):__slots__ = ('name', 'age')

类Cat 只能使用属性,name, age

静态函数

 使用 @staticmethod 标记方法,使用时不需要实例化。
class Triangle(object):def __init__(self, a, b, c):self._a = aself._b = bself._c = c# 静态方法
    @staticmethoddef is_valid(a, b, c):return a + b > c and b + c > a and c + a > bif __name__ == '__main__':Triangle.is_valid((3,4,5))

类函数

使用 @classmethod标记方法
class Clock(object):"""数字时钟"""def __init__(self, hour=0, minute=0, second=0):self._hour = hourself._minute = minuteself._second = second@classmethoddef now(cls): # cls 表示当前类ctime = localtime(time())return cls(ctime.tm_hour, ctime.tm_min, ctime.tm_sec) # 相当于调用类的构造函数


转载于:https://www.cnblogs.com/greatX/p/10930598.html

Day 8 面向对象相关推荐

  1. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  2. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?

    AutoSAR入门到精通系列讲解 将从2019年开始更新关于AutoSAR的知识,从入门到精通,博主xyfx和大家一起进步 雪云飞星 ¥29.90 去订阅 简单地说结构化分析方法主要用来分析系统的功能 ...

  3. 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类

    目录 scala面向对象 MAVEN依赖 类 - 掌握 创建类和对象 - 掌握 getter/setter - 了解 类的构造器 - 掌握 scala面向对象 MAVEN依赖 <?xml ver ...

  4. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  5. java面向过程和面向对象

    面向过程(Procedure Oriented):说的是功能的行为 面向对象(Object Oriented,简称OO):说的是功能的对象 面向过程理解: 当学习java的时候先了解java语言优良的 ...

  6. day22_面向对象

    面向过程: 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 面向对象: 优点是:解决了程序的扩展性.对 ...

  7. java面向对象-------静态初始化块

    1.构造方法用于对象的初始化!静态初始化块,用于类的初始化操作,在静态初始化块中不能直接访问非static成员. package java面向对象; /** * 测试静态初始化块 */public c ...

  8. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...

  9. Day-16 面向对象03 类与类之间的关系

    一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...

  10. 09_Java面向对象_第9天(类、封装)_讲义

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 A: 面向过程与面向对 ...

最新文章

  1. 子图同构问题Ullmann 算法(二)
  2. python123数字形式转换_【Python系统学习02】数据类型与类型转换
  3. 【知识星球】从SVM对偶问题,到疲劳驾驶检测,到实用工业级别的模型压缩技巧...
  4. 最小二乘法(一元)推导
  5. c语言二维数组初始化_6.2 C语言二维数组
  6. android添加商品到购物车,Android使用动画动态添加商品进购物车
  7. 计算机等级考试二级要学PS,关于计算机等级考试题库你所不知道的那些一级PS操作题...
  8. 组合模式——公司组织结构
  9. Java多线程:线程同步与关键字synchronized
  10. 接收机抽取的Matlab仿真代码,接收机的MATLAB仿真程序代码
  11. 【Android】安卓开发中的MVP架构模式与应用实例
  12. ArcMap打不开.jpg .bmp
  13. 最新自己怎么建网站零基础教程-李廷学
  14. 免费!中文!10个最佳Python学习网站推荐
  15. (一)软件开发背景 - 天津市政府采购中心网
  16. 【golang】timer 和 ticker
  17. Java语法理论和面经杂疑篇《七. 数据结构与集合源码》
  18. python-清华大学镜像源
  19. 算法导论 — 思考题15-11 库存规划
  20. 西邮Linux兴趣小组2020纳新试题

热门文章

  1. 蛋疼的ElasticSearch(一)之安装ElasticSearch
  2. 错误:android.util.SuperNotCalledException
  3. BB之Uncaught exception:net.rim.device.api....错误的解决之道
  4. 如何给按钮加上链接功能
  5. linux挂载与卸载(转)
  6. 62岁程序员植入逻辑炸弹, 面临10年监禁和25万美元罚款
  7. 疯了吧!面试官 5 连问一个 TCP 连接可以发多少个 HTTP 请求?
  8. 如何从零开始搭建 CI/CD 流水线
  9. 也许,这样理解 HTTPS 更容易
  10. Spring 框架用到的 9 个设计模式汇总!