day 23 面向对象中类的成员 和嵌套
1、类的成员? 变量、方法、属性
class Foo: # 方法
def __init__(self,name):
# 实例变量/字段
self.name = name # 方法
def func(self):
pass # obj,Foo类的对象
# obj,Foo类的实例
obj = Foo('朱奎峰')
变量:1、实例变量(字段)
2、类变量(静态字段)
实例一:
class Foo:
# 类变量(静态字段)
country = "中国" def __init__(self,name):
# 实例变量(字段)
self.name = name def func(self):
pass obj1 = Foo('季红')
obj2 = Foo('王晓东') Foo.country 思考题: 如何验证儿子都不知道私有字段的存在. 无法访问:
class Base(object):
__secret = "受贿" class Foo(Base): def func(self):
print(self.__secret)
print(Foo.__secret) obj = Foo()
obj.func() 可以访问:
class Base(object):
__secret = "受贿" def zt(self):
print(Base.__secret) class Foo(Base): def func(self):
print(self.__secret)
print(Foo.__secret) obj = Foo()
obj.zt()
实例
方法:1、实例方法
2、静态方法
3、类方法 @classmethod
- 实例方法
class Foo(object):
def __init__(self, name):
self.name = name # 实例方法
def func(self):
print(self.name) obj = Foo('..')
obj.func() - 静态方法
class Foo(object):
def __init__(self, name):
self.name = name # 静态方法,如果方法无需使用对象中封装的值,那么就可以使用静态方法
@staticmethod
def display(a1,a2):
return a1 + a2
Foo.display(1,3) - 类方法
class Foo(object): # 类方法,cls是类
@classmethod
def show(cls,x1,x2):
print(cls,x1,x2) # 执行类方法
Foo.show(1,8) 面试题: 静态方法/类方法和实例方法的区别? 属性(通过方法改造出来):
示例:
class Foo(object):
def __init__(self):
pass @property
def start(self):
return 1 @property
def end(self):
return 10 obj = Foo()
print(obj.start)
print(obj.end)
"""
# 总结:
# 1. 编写时
# - 方法上方写 @property
# - 方法参数:只有一个self
# 2. 调用时:无需加括号 对象.方法
# 3. 应用场景: 对于简单的方法,当无需传参且有返回值时,可以使用 @property
"""
@staticmethod 静态方法 ,如果方法无需使用对象中封装的值,那么就可以使用静态方法@staticmethod,放在定义的函数前面
def display(a1,a2):
属性: 通过方法改造出来
class Foo(object):
def __init__(self):
pass @property
def start(self):
return 1 @property
def end(self):
return 10 obj = Foo()
print(obj.start)
print(obj.end)
"""
# 总结:
# 1. 编写时
# - 方法上方写 @property
# - 方法参数:只有一个self
# 2. 调用时:无需加括号 对象.方法
# 3. 应用场景: 对于简单的方法,当无需传参且有返回值时,可以使用 @property
"""
2、静态方法、类方法和实例方法的区别?
定义 静态方法、类方法定义的时候需要添加@ ,实例方法不需要添加
执行 静态方法、类方法执行时通过类. 可以直接调用, 实例方法 先实例化,然后通过对象. 调用
应用场景?
如果在方法内部不会用到对象相关的数据时,就可以用静态 和类
如果需要用到对象 用实例方法
如果在代码中会用到当前类,为了省事可以用类方法
3、属性:
嵌套
面向对象:
"""
创建三个学校且三个学校的设施内容等都是一致.
""" class School(object):
def __init__(self, name, address):
self.name = name
self.address = address def speech(self):
print('讲课') obj1 = School('老男孩北京校区', '美丽富饶的沙河')
obj2 = School('老男孩上海校区', '浦东新区')
obj3 = School('老男孩深圳校区', '南山区')
class Teacher(object):
def __init__(self, name, age, salary):
self.name = name
self.age = age
self.__salary = salary
self.school = None t1 = Teacher('李杰', 19, 188888)
t2 = Teacher('艳涛', 18, 60)
t3 = Teacher('女神',16, 900000)
# ############## 老师分配校区
t1.school = obj1
t2.school = obj1
t3.school = obj2
# ####################################
# 查看t1老师,所在的校区名称/地址
print(t1.school.name)
print(t1.school.address)
print(t1.name)
print(t1.age)
t1.school.speech() 准则: 字段和方法的归类. 以前:
[
{"name":'alex1','age':18,xxx:999},
{"name":'alex2',age':18},
]
day 23 面向对象中类的成员 和嵌套的更多相关文章
- 文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式
本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述, ...
- JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买 ...
- python全栈开发 * 23 面向对象 知识点汇总 * 180704
23 面向对象 -----特殊方法 1. isinstance(obj,类名) 判断对象是否是此类实例化或者此类的子类实例化出来的class A:passclass B(A):passb1=B()pr ...
- C#中类的成员
一.C#中类的成员 1. 类的成员 类中的数据和函数都称为类的成员.类的成员可以分为两类: ?类本身所声明的. ?从基类中继承来的. 如果在类声明中没有指定基类,则该类将继承System.Object ...
- Java面向对象——类的成员
Java面向对象——类的成员 摘要:本文主要介绍了类的常见成员. 属性 属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值. 默认值 Boolean ...
- Java基础语法(9)-面向对象之类的成员
title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...
- Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass
Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...
- C# 中类的成员有哪些?
类(class)是C#类型中最基础的类型.类是一个数据结构,将状态(字段)和行为(方法和其他函数成员)组合在一个单元中.类提供了用于动态创建类实例的定义,也就是对象(object).类支持继承(inh ...
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- Andriod项目结构
在Android Studio第一次创建一个项目,点击左侧的Project选项卡,在Project窗口下有几个不同的视图,默认的是名为Android的视图: 对于大部分的开发工作,我们只要在Andro ...
- xtrabackup备份原理及流式备份应用
目录 xtrabackup备份原理及流式备份应用 0. 参考文献 1. xtrabackup 安装 2. xtrabackup 备份和恢复原理 2.1 备份阶段(backup) 2.2 准备阶段(pr ...
- Java 发展历程
JDK 1.0 1991年4月,由 James Gosling 博士领导的绿色计划(Green Project)开始启动,此计划的目的是开发一种能够在各种消费性电子产品(如机顶盒.冰箱.收音机等)上运 ...
- 编译原理实验 NFA子集法构造DFA,DFA的识别 c++11实现
实验内容 将非确定性有限状态自动机通过子集法构造确定性有限状态自动机. 实验步骤 1,读入NFA状态.注意最后需要设置终止状态. 2,初始态取空,构造DFA的l0状态,将l0加入未标记状态队列que ...
- 非旋treap (fhq treap) 指针版
传送门 看了一圈,好像真的没什么用指针的呢.. 明明觉得指针很好看(什么??你说RE???听不见听不见) 其实我觉得用数组的话不RE直接WA调起来不是更困难嘛,毕竟通过gdb还可以知道哪里RE,WA就 ...
- Java加密、解密Word文档
对一些重要文档,我们为保证其文档内容不被泄露,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件.下面介绍了一种比较简单的方法给Word文件添加密码保护以及如何给已加密的Word文件取消密 ...
- DAY 4 基础算法
基础算法 本来今天是要讲枚举暴力还有什么的,没想到老师就说句那种题目就猪国杀,还说只是难打,不是难.... STL(一)set 感觉今天讲了好多,set,单调栈,单调队列,单调栈和单调队列保证了序列的 ...
- python 快速发送大量邮件
因为公司需求,需要发送千万封级别邮件. # coding:utf-8 import csv import smtplib from email.mime.text import MIMEText im ...
- Eclipse下载安装并运行第一个Hello world(详细)
Eclipse下载安装并运行第一个Hello world(详细) 1.下载安装和配置JDK JDK详细的安装教程参考:https://www.cnblogs.com/mxxbc/p/11845150. ...
- vue根据不同环境进行编译打包
工作中我们在开发过程中,有很多的开发环境,如果我们不进行统一配置,那么我们只能手动进行更改,这样会给我们带来诸多不便,所以我们要配置根据不同的环境来进行编译打包. 先看一下我的项目目录: 在confi ...