小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系)
小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系
1. 依赖关系.
最轻的一种关系
在方法中引入另一个类的对象
class Elephant:
def __init__(self, name):
self.name = name
def open(self, ref): # 想要的是一个冰箱。 是哪个冰箱没有制定
print("冰箱哥哥, 开门把")
ref.open_door()
def close(self, ref): # 依赖关系
print("冰箱哥哥, 我进来了。 关门把")
ref.close_door()
def jin(self):
print("进冰箱装自己")
class Refrigerator:
def open_door(self):
print("冰箱陌陌的打开了自己的门")
def close_door(self):
print("冰箱陌陌的关上了自己的门 ")
# class GaoYaGuo:
# def open_door(self):
# print("冰箱陌陌的打开了自己的门")
# def close_door(self):
# print("冰箱陌陌的关上了自己的门 ")
alex = Elephant("李杰")
bx1 = Refrigerator()
#
alex.open(bx1)
alex.jin()
alex.close(bx1)
object
2. 关联关系, 聚合关系, 组合关系
类与类之间的关系是比较紧密的。
# class Boy:
# def __init__(self, name, xingge, girlFriend=None):
# self.name = name
# self.xingge = xingge
# self.girlFriend = girlFriend
#
# def yujian(self, girl):
# self.girlFriend = girl
#
# def chi(self):
# if self.girlFriend:
# print("随便池! %s 和 %s" % (self.name, self.girlFriend.name))
# else:
# print("单身狗, 池什么池?")
#
# class Girl:
# def __init__(self, name, boyFriend):
# self.name = name
# self.boyFriend = boyFriend
# def chi(self):
# print("%s在吃饭" % self.name)
#
# girl = Girl("白骨精")
#
# alex = Boy("金王", "娘")
# alex.chi()
#
# alex.yujian(girl)
# alex.chi()
#
# # 找到alex的女朋友
# # alex.girlFriend.name
# alex.girlFriend.chi() # 一个对多个. class School:
def __init__(self, name, address, phone):
self.name = name
self.address = address
self.phone = phone
self.__teach_list = [] def zhaopin(self, t):
self.__teach_list.append(t) def display(self):
for el in self.__teach_list:
print(el.name, el.hobby) class Teacher:
def __init__(self, name, gender, salary, hobby, school):
self.name = name
self.gender = gender
self.salary = salary
self.hobby = hobby self.school = school oldboy_bj = School("北京老男孩", "美丽富饶的沙河", "10086")
oldboy_sh = School("北京老男孩, 上海分校", "上海浦东", "10010")
oldboy_sz = School("北京老男孩, 深圳分校(骑士计划)", "南山区", "10000") t1 = Teacher("配齐", "男", 200000, "上课", oldboy_bj)
t2 = Teacher("太白", "男", 150000, "开车", oldboy_bj)
t3 = Teacher("Eggon", "男", 123456, "钻研技术", oldboy_sh)
t4 = Teacher("高鑫", "女", 45678, "相夫教子", oldboy_sz)
t5 = Teacher("日天", "男", 666, "看天", oldboy_sz) # print(t3.school.address) # 找到老师所在的学校的地址 oldboy_bj.zhaopin(t1)
oldboy_bj.zhaopin(t2)
oldboy_bj.display() oldboy_sh.zhaopin(t3) oldboy_sz.zhaopin(t4)
oldboy_sz.zhaopin(t5) oldboy_sz.display()
3. 继承关系, 实现关系
self:当前执行这个方法的对象。
# 可哈希. 内部是否哈希算法 __hash__ # class Foo(object): # 所有的类都会默认继承object
# def __init__(self):
# pass
# def func(self):
# pass
# __hash__ = None
#
# dic = {}
# dic[Foo] = "123456" # 类名是可哈希的。
# dic[Foo()] = "刘伟" # 类中是否包含__hash__
# print(dic) # 默认的类和对象都是可哈希的 # class Base:
# def __init__(self, num):
# self.num = num
#
# def func1(self):
# print(self.num)
#
# class Foo(Base):
# pass
#
# obj = Foo(123)
# obj.func1() # 123 # class Base:
# def __init__(self, num):
# self.num = num
# def func1(self):
# print(self.num)
#
# class Foo(Base):
# def func1(self):
# print("Foo. func1", self.num)
#
# obj = Foo(123)
# obj.func1() # ???? Foo. func1 123 #
# class Base:
# def __init__(self, num):
# self.num = num
# def func1(self):
# print(self.num)
# self.func2()
# def func2(self):
# print("Base.func2")
#
# class Foo(Base):
# def func2(self):
# print("Foo.func2")
#
# obj = Foo(123)
# obj.func1() # 123 # class Base:
# def __init__(self, num):
# self.num = num
#
# def func1(self):
# print(self.num)
# self.func2()
#
# def func2(self):
# print(111, self.num)
#
# class Foo(Base):
# def func2(self):
# print(222, self.num)
#
# lst = [Base(1), Base(2), Foo(3)]
# for obj in lst:
# obj.func2() # class Base:
# def __init__(self, num):
# self.num = num
#
# def func1(self):
# print(self.num)
# self.func2()
#
# def func2(self):
# print(111, self.num)
#
# class Foo(Base):
# def func2(self):
# print(222, self.num)
#
# lst = [Base(1), Base(2), Foo(3)]
# for obj in lst:
# obj.func1() # 1
# 111 1
# 2
# 111 2
# 3
# 222 3 # 总结: self当前访问xx方法的那个对象
4. 特殊成员(__init__)
class Foo:
def __init__(self):
print("我是初始化") def __call__(self, *args, **kwargs):
print("我是靠") def __getitem__(self, item):
print("我是getitem", item)
return "大胖小子"
def __setitem__(self, key, value):
print(key, value) def __delitem__(self, key):
print(key) def __enter__(self):
print("我是进入")
return "周润发"
def __exit__(self, exc_type, exc_val, exc_tb):
print("我是出来") # 类名() __init__() 构造方法
# obj = Foo()
# 对象() __call__()
# obj() # python特有的.
# 对象[xxx] 从对象中获取数据 默认执行__getitem__() # 对象[xxx] = ,.... 默认执行__setitem__()
# obj["汪峰"] = "章子怡" # del obj[key] 默认执行__delitem__()
# del obj['马化腾'] # dic = {"name":'汪峰', 'age':18}
# print(dic['name'])
#
# with obj as xx:
# print(xx)
# print("你好. 我叫周润发") class Boy(object):
def __init__(self, name, address, phone):
self.name = name
self.address = address
self.phone = phone def __str__(self):
return "name:%s, address:%s phone:%s" % (self.name, self.address, self.phone) def __new__(cls, *args, **kwargs):
print("新概念")
return object.__new__(cls) # 这句话才是创建对象. b = Boy("alex", "北京沙河", "10086")
print(b) lst = [123,456]
print(lst)
小学生绞尽脑汁也学不会的python(面对对象-----类与类之间的关系)的更多相关文章
- 小学生绞尽脑汁也学不会的python(面对对象-----成员)
小学生绞尽脑汁也学不会的python(面对对象-----成员) 成员 class Person: def __init__(self, name, num, gender, birthday): # ...
- 小学生绞尽脑汁也学不会的python(初识面对对象)
小学生绞尽脑汁也学不会的python(初识面对对象) 一. 面向对象思想 1. 面向过程. 重点在"过程". 按照实物的发展流程. 先干嘛,后干嘛, 最后干嘛.... 优点: 简单 ...
- 小学生绞尽脑汁也学不会的python(异常,约束,MD5加密,日志处理)
小学生绞尽脑汁也学不会的python(异常,约束,MD5加密,日志处理) 异常处理(处理) 1.产生异常.raise 异常类(),抛出异常2. 处理异常: try: xxxxx # 尝试执行的代码. ...
- 小学生绞尽脑汁也学不会的python(反射)
小学生绞尽脑汁也学不会的python(反射) 1. issubclass, type, isinstance issubclass 判断xxxx类是否是xxxx类的子类 type 给出xxx的数据类型 ...
- 16、python面对对象之类和继承
前言:本文主要介绍python面对对象中的类和继承,包括类方法.静态方法.只读属性.继承等. 一.类方法 1.类方法定义 使用装饰器@classmethod装饰,且第一个参数必须是当前类对象,该参数名 ...
- 15、python面对对象之类和对象
前言:本文主要介绍python面对对象中的类和对象,包括类和对象的概念.类的定义.类属性.实例属性及实例方法等. 一.类和对象的概念 问题:什么是类?什么是实例对象? 类:是一类事物的抽象概念,不是真 ...
- Python - 面对对象(基础)
目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ...
- Python - 面对对象(进阶)
目录 Python - 面对对象(进阶) 类的成员 一. 字段 二. 方法 三. 属性 类的修饰符 类的特殊成员 Python - 面对对象(进阶) 类的成员 一. 字段 字段包括:普通字段和静态字段 ...
- Python - 面对对象(其他相关,异常处理,反射,单例模式,等..)
目录 Python - 面对对象(其他相关,异常处理,反射,等..) 一.isinstance(obj, cls) 二.issubclass(sub, super) 三.异常处理 1. 异常处理 2. ...
随机推荐
- Python复利
Python复利 复利的计算是对本金及其产生的利息一并计算,也就是利上有利. 复利计算的特点是:把上期末的本利和作为下一期的本金,在计算时每一期本金的数额是不同的.复利的计算公式是: s = 0 ...
- Python学习笔记(3)for循环和while循环
2019-02-25 (1)break语句:终止当前循环,跳出循环体. (2)continue语句:终止本轮循环并开始下一轮循环(在下一轮循环开始前,会先测试循环条件). (3)for循环 ① ran ...
- 【hiho一下第十二周】刷油漆
[题目链接]:http://hihocoder.com/problemset/problem/1055 [题意] [题解] 设f[x][i]表示以第x个节点为根的子树; 不选x这个节点,然后子树里面选 ...
- smartctl----硬盘状态监控
smartmontools介绍 smartmontools是一款开源的磁盘控制,监视工具,可以运行在Linux,Unix,BSD,Solaris,Mac OS,OS/2,Cygwin和Windows上 ...
- C#中的LINQ 基础
1.LINQ的数据源 必须可枚举的,即必须是数组或者集合 (继承了IEnumerable<T>接口就可以,注意是IEnumerable<T>,不是IEnumerable接口,不 ...
- Linux C++服务器端进程SDK
目标:开发人员在这个SDK的基础上开发,不用关注技术细节,只需要开发对应业务消息处理函数即可 1.每个进程SDK包括一个系统服务和多个业务服务,对外发布服务ID,每个服务有一个请求队列和一个反馈队列, ...
- 多校第二场 1004 hdu 5303 Delicious Apples(背包+贪心)
题目链接: 点击打开链接 题目大意: 在一个周长为L的环上.给出n棵苹果树.苹果树的位置是xi,苹果树是ai,苹果商店在0位置,人的篮子最大容量为k,问最少做多远的距离可以把苹果都运到店里 题目分析: ...
- poj 3259 Wormholes 【SPFA&&推断负环】
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36852 Accepted: 13502 Descr ...
- Codeforces Round #260 (Div. 1) 455 A. Boredom (DP)
题目链接:http://codeforces.com/problemset/problem/455/A A. Boredom time limit per test 1 second memory l ...
- Swift String转Character数组
通过String的characters方法,将String转Character数组 例如: let characters:Array<Character> = Array("01 ...