python 面向对象_2
self的理解
通俗理解self就是实例对象,实例化的是什么,self就是什么
实例变量: 经过实例化才能使用的变量
class Person():
def __init__(self,id,name):#构造函数
self.id = id#实例变量
self.name = name#实例变量 def cook(self):
print('%s在做饭'%self.name) def housework(self):
print('%s在做家务'%self.name) xh = Person(1,'小黑')#等同于__init(self,id,name) self其实就是xh
xh.cook()
xh.housework()
xb = Person(2,'小白')
xb.cook()
类变量: 定义在类里面的变量,类的对象优先获取实例变量,也就是构造函数中变量的,如果获取不到就会获取类变量
class Test:
name = 'haha'
def __init__(self,name):
# self.name = name
pass
def test(self):
print('姓名是%s'%self.name) t=Test('ahah')
print(t.name)
类方法:不用实例化即可调用的方法,类名可直接调用,实例也可以调用,类方法可以调用类变量
class Test:
name = 'haha'
def __init__(self,name):
# self.name = name
pass
def test(self):
print('姓名是%s'%self.name)
@classmethod #加上这个装饰器就是定义一个类方法
def sayCountry(cls): #cls代表本身的这个类'Test'
print(cls.name)
t=Test('ahah')
print(t.name)
Test.sayCountry()#类方法,不需要实例化,通过类名直接调用;用实例也能调用
静态方法:无法调用类变量,无法调用类方法; 类名可以直接调用它,实例也可直接调用它
class Test:
name = 'haha'
def __init__(self,name):
self.name = name
def test(self):
print('姓名是%s'%self.name)
@classmethod #加上这个装饰器就是定义一个类方法
def sayCountry(cls): #cls代表本身的这个类'Test'
print(cls.name)
@classmethod
def getCountry(cls):
cls.sayCountry()#类方法可互相调用
@staticmethod #加上这个装饰器就是定义一个静态方法,无法调用类变量和类方法
def help():
print('说明书')
t=Test('ahah')
print(t.name)
Test.sayCountry()#类方法,不需要实例化,通过类名直接调用;用实例也能调用
Test.help()
Test.getCountry()
属性方法:看起来像变量的一个方法,不能用参数
class Test:
name = 'haha'
def __init__(self,name,age):
self.name = name
self.age = age
def test(self):
print('姓名是%s'%self.name)
@classmethod #加上这个装饰器就是定义一个类方法
def sayCountry(cls): #cls代表本身的这个类'Test'
print(cls.name)
@classmethod
def getCountry(cls):
cls.sayCountry()#类方法可互相调用
@staticmethod #加上这个装饰器就是定义一个静态方法,无法调用类变量和类方法
def help():
print('说明书')
@property
def price(self):#属性方法,不能用参数
print(self.age)
t=Test('ahah',10)
print(t.name)
Test.sayCountry()#类方法,不需要实例化,通过类名直接调用;用实例也能调用
Test.help()
Test.getCountry()
t.price #不用加括号,引用方式和引用属性(变量)一致
python 面向对象_2的更多相关文章
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- python面向对象进阶(八)
上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- Python面向对象详解
Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
- python 面向对象学习
------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...
- 初识python面向对象
一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age ...
随机推荐
- Logistic回归实战篇之预测病马死亡率
利用sklearn.linear_model.LogisticRegression训练和测试算法. 示例代码: import numpy as np import matplotlib.pyplot ...
- 论文翻译:HetConv-Heterogeneous Kernel-Based Convolutions for Deep CNNs
Abstract 我们提出了一种新颖的深度学习架构,其中卷积操作利用了异构内核.与标准卷积运算相比,所提出的HetConv(基于异构内核的卷积)减少了计算(FLOPs)和参数的数量,同时仍保持表示效率 ...
- Kubernetes网络隔离NetworkPolicy
Kubernetes要求集群中所有pod,无论是节点内还是跨节点,都可以直接通信,或者说所有pod工作在同一跨节点网络,此网络一般是二层虚拟网络,称为pod网络.在安装引导kubernetes时,由选 ...
- navicat连接 mysql报错1251解决方案
转自:https://blog.csdn.net/XDMFC/article/details/80263215 好不容易安装好mysql,但又出现了mysql客户端版本太低的问题.根据参考的这篇博客, ...
- Android基础内容提供者ContentProvider的使用详解(转)
1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...
- python的并发GIL 了解
gil 又称 global interpreter lock (全局解释器锁) #python 中一个线程对应于c语言中的一个线程 #gil使得同一个时刻只有一个线程在一个cpu上执行字节码,无法将 ...
- LayaAir疑难杂症之四:laya引擎自动断点到bundle.js文件中且无报错,但程序不再执行
在一次断点调试中,突然程序不再按照博主指定的断点执行,莫名其妙端点到了bundle.js文件中的某一行中,这是不应该的,第一次时间反应就是引擎出了问题,但是总不能让博主卸载重装吧. 经过查找资料,询问 ...
- PostgreSQL逻辑复制到kafka-实践
kafka 安装 wget http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.12-2.3.0.tgz cp kafka_2.12-2.0.1.t ...
- Android 子线程无法刷新UI界面
问题:在Android开发中,子线程无法直接更改UI界面视图的刷新 这个时候 Handler 起到了至关重要的作用. 简单来说 , Handler就是用来传递消息的. Handler可以当成子线程与主 ...
- [Vue] vue的一些面试题4
1.你知道 nextTick 的原理吗? 用法:在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 异步更新队列提到 DOM 的更新是异步执行的,只要 ...