@property、关联关系、继承、多继承
1.@property使用来修饰属性的,将属性私有化改为公有化,但是可以设置属性条件
格式:
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
@property
def age(self):
return self.age
@age.setter
def age(self,age):
if age >0 and age <100:
self.age = age
else:
print('不属于正常范围!')
def __str__(self):
return '{}今年{}岁!'.format(self.name,self.age)
p = Person('张三',20)#创建对象
p.age = 25
p.__str__()#结果为张三今年25岁!
2.关联关系分为两种:一种是has a关系,另外一种是is a关系
3.has a关系是指一个类包含另外一种类,或者另外几种类
class Road:
def __init__(self,r_name,l):
self.r_name = r_name
self.l = l
class Car:
def __init__(self,c_name,speed):
self.c_name = c_name
self.speed = speed
def get_time(self,road):#调用Road类的对象,以及方法
t = road.l//self.speed
return '{}在{}行驶了{}小时'.format(self.c_name,road.r_name,t)
def __str__(self):
return '车名:{},时速:{}'.format(self.c_name,self.speed)
r = Road('106国道',336)
c = Car('奥迪',100)
print(c.get_time())#结果为奥迪在106国道上面行驶了3小时
print(c.__str__())#结果为车名:奥迪 时速100
4.is a其实就是继承的关系,子类继承父类
格式子类名(父类名):
class Person:
def __init__(self,num,name,salary):#初始化方法
self.num = num
self.name = name
self.salary = salary
def get_num(self):#获取工号方法
return self.num
def get_name(self):#获取年龄方法
return self.name
def set_name(self,name):#设置姓名方法
self.name = name
def get_salary(self):
return self.salary
def __str__(self):#查看员工的所有信息
return '工号为{}的员工{},薪资为{}'.format(self.num,self.name,self.salary)
#定义子类Worker类
class Worker(Person):
def __init__(self,hours,h_salary):
super().__init__()#调用父类的方法,通过super().方法名
self.hours = hours
self.h_salary = h_salary
def get_salary(self):#重写父类方法
salary += hours*h_salary
return self.salary
w = Worker(101,'张三',3000,200,15)
print(w.get_salary)#结果为6000#无需重写父类方法,可以共用
print(w.get_num())#结果,101
w.set_name('张小三')#无需重写父类方法,可以共用
print(w.__str__())#结果为员工号为101的员工张小三,薪资6000
#直接调用父类的__str__()
5.多继承:就是一个子类可以继承多个父类
python2使用的是经典类:深度优先
python3使用的是新式类:广度优先:从左至右,深度优先
#新式类
class P1(object):
def foo(self):
print('p1----->foo')
def bar(self):
print('p1----->bar')
class P2(object):
def foo(self):
print('p2----->foo')
def bar(self):
print('p2----->bar')
class C1(P1,P2):
pass
class C2(P1,P2):
def foo(self):
print('c2----->bar')
class D(C1,C2):
pass
d = D()
d.foo()#结果为p1----->foo
d.bar()#c2----->bar
'''解析:
1)D类对象继承C1,C2类,C1,C2类都继承P1,P2类,P1,P2类都继承
object类
2)当对象d在调用foo方法时,先去自身的类中寻找方法,发现没有,再去
由左到右的父类C1中去找,发现C1类中也并没有,就去父类C2中调用,发现没有该方法,就去C2父类P1中寻找发现有foo方法,故打印p1----->foo
3)当对象d在调用bar方法时,先去自身的类中寻找方法,发现没有,再去
由左到右的父类C1中去找,发现C1类中也并没有,就去父类C2中调用,发现有该方法,故打印C2----->bar
4)如果是经典类的话,在P1,P2类中没有父类object
它的继承调用是D类没有找C1类,C1类没有找C1父类P1类
如果在没有就找C2,P2,符经典类打印结果为p1----->foo,p1----->bar
'''
@property、关联关系、继承、多继承的更多相关文章
- web前端开发必懂之一:JS继承和继承基础总结
首先,推荐一篇博客豪情的博客JS提高: http://www.cnblogs.com/jikey/p/3604459.html ,里面的链接全是精华, 一般人我不告诉他; 我们会先从JS的基本的设计模 ...
- day23:单继承&多继承&菱形继承&__init__魔术方法
1.单继承 1.1 关于继承的一些基本概念 1.2 子类可以调用父类的公有成员 1.3 子类无法调用父类的私有成员 1.4 子类可以改写父类的方法 2.多继承 2.1 多继承的基本语法 2.2 sup ...
- c++ 虚继承与继承的差异 (转)
转自:CSDN dqjyong 原文链接:http://blog.csdn.net/dqjyong/article/details/8029527 前面一篇文章,说明了在C++ 虚继承对基类构造函数调 ...
- inheritance,菱形继承, 虚继承,virtual
//菱形继承 ||||||| 虚继承 #include <iostream> using namespace std; class R { int r; public: ...
- C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)
各种继承方式: 特征 公有继承 保护继承 私有继承 公有成员变为 派生类的公有成员 派生类的保护成员 派生类的私有成员 保护成员变为 派生类的保护成员 派生类的保护成员 派生类的私有成员 私有成员变为 ...
- js原生设计模式——2面向对象编程之继承—原型继承(类式继承的封装)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- Day7 类的继承和继承实现的原理
继承可以分为但继承,多继承. 继承的基本形式 class ParentClass1(object): #定义父类 pass class ParentClass2: #定义父类 pass class S ...
- C++中的继承(1) 继承方式
1.继承与派生 继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一.简单的说,继承是指一个对象直接使用另一对象的属性和方法.继承呈现了 面向对象程序设 计的层次结构, 体现了 由简单 ...
- 深入浅出javascript(十二)继承——构造函数继承和组合继承
#题记: 有一水果类,抽象出属性包括:name(水果品种),price(价格),id(ID号).现有两个子类,分别为苹果,桔子,希望继承水果父类. 一.构造函数继承 构造函数继承相当把父类的属性在子类 ...
- python的类的继承-接口继承-归一化设计
1.先在子类本身找,如果子类没有,会去父类找 class Dad: '这个是爸爸类' money=10#Dad类的数据属性 def __init__(self,name): print("爸 ...
随机推荐
- 说一说webpack的配置文件
可能有一些友友会奇怪为什么在写webpack的配置文件的时候,我们只能用commonJS导出. 原因:在打包的时候需要运行webpack的配置文件里面的代码,而webpack在打包运行的环境在node ...
- Python自学day03
1.数据类型 int 1,2,3用于计算 bool True,False用于判断 str 存储少量数据,用于操作 list 存储大量数据 [1,2,3,'a ...
- AD使用积累 - 相同网络的覆铜和走线无法自动连接问题
像下图中这样,铜皮和走线是同一个网络,却没有连在一起. 解决方法: 选中目标铜皮,在在Properties中的Fill Mode中找到这个部分,先择Pour Over All Same Net Obj ...
- Oracle数据库安装时,安装报错ins_emagent.mk
安装oracle数据库过程中,通过图形界面安装,出现ins_emagent.mk报错提示 解决方法 修改$ORACLE_HOME/sysman/lib/ins_emagent.mk,将$(MK_EMA ...
- 《Unix/Linux系统编程》第十二周学习笔记
<Unix/Linux系统编程>第十二周学习笔记 MySQL数据库简介 MySQL是一个关系型数据库管理系统,是最流行的关系型数据库管理系统之一.在 WEB 应用方面,MySQL 是最好的 ...
- json提取器通过多条件筛选提取ID
可能在某些列表中如名称会有重复,此时就需要使用多个搜索条件来判定唯一性 $.data.[?(@.tymc=="测试测试")].[?(@.plat_merchandise_id==& ...
- 关与python面向对象的认识
面向对象编程 类:从一堆对象中以抽象的方式把相同的特征归类得到. 抽象类 类 实列 子类抽象为父类,子类继承父类特征. 类实例化为实例,实例抽象为类. class Human(object): cen ...
- 三艾云 Kubernetes 集群最佳实践
三艾云 Kubernetes 集群最佳实践 三艾云 Kubernetes 集群最佳实践 容器是 Cloud Native 的基石,它们之间的关系不言而喻.了解容器对于学习 Cloud Native 也 ...
- Flask CURD(增删改查)
1.创建flask项目 2.修改配置文件: ''' config.py 保存项目配置 ''' 导入Flask模块 from flask import Flask 额外安装: 数据库操作模块 from ...
- 三天吃透RabbitMQ面试八股文
本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...