python 面向对象(二)成员
##################################总结###########################
类的成员:
变量:
实例变量 对象.属性=xxx
类变量 共享给所有该类的对象 类.变量
方法:
实例方法, 对象.方法() ###加了self的.调用的时候。必须用对象去访问. (重点)
def method(self):
pas
类方法,一般都使用类名.方法() ###当方法需要传递类名的时候. 需要类方法.
@classmethod
def method(cls):
静态方法,写在类力的函数,一般使用类名.方法() ###当你的方法不需要传递当前类的对象的时候。
@staticmethod
def method():
pass
例子########
class Foo:
def m1(self):
pass
@classmethod
def m2(cls)
pass
@staticmethod
def m3():
pass
f=Foo()
f.m1()
Foo.m2()
Foo.m3()
属性:
@property
作用:把一个方法变成属性.
有些属性必须经过计算而得到(比如出生算年纪)
@property
def age(self):
run 2018-self.birth
print(p.age)#没加小括号
私有:
__开头的东西就是私有的
只有在自己类中使用
class Foo:
name='aa'
def __init__(self,name):
self.name=name
def m1(self):
print('m1111')
@classmethod
def m2(cls):
return cls.name
@staticmethod
def m3(a,b):
return a+b
@property
def bin(self):
return '这个是%s'%(self.name)
f=Foo('zaizai')
f.m1()#调用方法
cls=Foo.m2()
print(cls)#普通方法,若要在不用类名中 每次都要self.name
static=Foo.m3(1,2)
print(static)#当你的方法不需要传递当前类的对象的时候
print(f.bin)
class Person:
def __init__(self):
pass
# 实例方法需要传递类的对象 self
def think(self):
print("人能思考")
# 静态方法不需要传递对象或者类
@staticmethod # 静态方法
def jisuan(a, b):
print("我来过这里")
return a + b
# 类方法: 第一个参数传递的是类名
@classmethod
def clsMethod(cls): # cls表示的类
p = cls() # 可以动态的创建对象.
print("我是一个类方法", p) p = Person()
p.think() #实例方法
# 静态方法的调用:
c = Person.jisuan(1, 2) # 类名访问
print(c) #类方法调用
Person.clsMethod() # 类方法默认第一个参数接收的是类名
p.clsMethod() # 在调用类方法的时候. 默认的把类名传递给类方法
#<bound method Person.he of <class '__main__.Person'>>
Person.clsMethod # 推荐类名调用
结果:
我来过这里
3
我来过这里
8
我是一个类方法<class '__main__.Person'>
4.用方法来描述一个属性
@property
方法只能有一个参数
方法必须有返回值
class Person:
def __init__(self, name, gender, birth):
self.name = name
self.gender = gender
self.birth = birth # 2000 2018
# 年龄 -> 应该是算出来的. 而不是直接存储
@property # 把一个方法更改成一个属性, 每次拿属性的时候都会自动的去执行这个方法
# 方法的返回值就是属性值
def age(self): # 实例方法
print("我是方法")
return 2018 - self.birth p1 = Person("武sir", "未知", 2000)
print(p1.age) # 看着像一个变量一样使用, 实际上这里是调用的一个方法 不用加()
print(p1.age)
# p1.age = 26 # 不可以的, 因为age是一个方法. 不是一个变量
5.私有
只能在自己类中访问. 带有前置双下环线的内容
__方法
__变量
__类变量
都是私有. 比人访问不到. 包括他儿子.
class Person:
__qie = "潘潘" # 类变量 def __init__(self, name, mimi):
self.name = name
self.__mimi = mimi # 私有内容 实例变量 def gaosu(self):
print(f"把秘密告诉了太白, 第二天所有人都知道了{self.__mimi}")
print(Person.__qie) # 私有的类变量只能在类中调用
# return self.__mimi def __yue(self): # 私有的实例方法
print("我要和宝宝约") @staticmethod
def __koujiao():
print("test希望和嫂子一起抠脚") @classmethod
def __fangqi(cls):
print("和嫂子一起放气")
p = Person("wusir", "和嫂子的故事")
# print(p.__mimi) # 私有的内容只能在类里面调用
p.gaosu() # print(Person.__qie)
a = Person("wusir", "嫂子的故事")
# a.__yue()
# Person.__koujiao() ########结果###########
把秘密告诉了太白, 第二天所有人都知道了和嫂子的故事
潘潘
python 面向对象(二)成员的更多相关文章
- python面向对象(二)——类成员
Python面向对象 类成员 1.字段 普通字段 属于对象 静态字段 属于类 2.方法 普通方法 触发者是对象 括号里至少一个参数 se ...
- python面向对象之类成员
面向对象编程: OOP编程是利用类和对象来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得简单,并可以大大提高程序开发效率.另外,基于面向对象的程序可 ...
- python面向对象二
1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Stud ...
- JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链
前 言 JRedu 上一篇博客中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方 ...
- Python面向对象之成员修饰符
对于这些类成员有修饰符 之前定义字段country任何对象都可以访问,是公有的 可以定义为私用属性,只有类内部的方法可以调用,外部不能直接调用,但是可以间接调用 vim day7-10.py #!/u ...
- Python面向对象-类成员
类的成员可以分为三大类:字段.方法和属性: 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在 ...
- python 面向对象二 类和实例
一.类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法, ...
- 疯狂java学习笔记之面向对象(二) - 成员变量与局部变量
Java变量按其作用域可分为:成员变量和局部变量.注意:在Java中是没有全局变量这个概念的 一.成员变量: 成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰 实例变量的 ...
- python面向对象之类成员修饰符
类的所有成员分为: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能访问 私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线.(特殊成员除外,例如:__init__.__c ...
随机推荐
- webpack——快速入门【一】
学习webpack https://github.com/webproblem/learning-article#webpack https://github.com/lengziyu/learn-w ...
- Scrapy爬取伯乐在线文章
首先搭建虚拟环境,创建工程 scrapy startproject ArticleSpider cd ArticleSpider scrapy genspider jobbole blog.jobbo ...
- day2 网络基础
网路基础 网络OSI模型七层: 物理层: 定义特性:机械,电器,功能,过程: 定义接口标准:双绞线,光纤,同轴电缆: 相关协议:无: 数据链路层: 定义帧的开始结束,封装成帧,差错校验,透明传输(防止 ...
- MT【243】球内接四面体体积
已知半径为2的球面上有$A,B,C,D$四点,若$AB=CD=2$,则四面体$ABCD$的体积最大为____ 解答:利用$V=\dfrac{1}{6}|AB||CD|d<AB,CD>sin ...
- yarn如何全局安装命令以及和环境变量的关系
npm全局安装 npm i -g xxx yarn 全局安装 yarn global add xxx 然而你可能会发现npm全局安装后的命令可以直接使用,而yarn却不行,这是为什么呢? 我们来查看下 ...
- 【QML与C++混合编程】用QVariantList传递数组类型成员
2017.5.8 更新:Record类要用指针,QObject 不能有拷贝函数. 我有一个C++中自定义的ReaderModel,继承自QAbstractListModel类,传递给了QML. 它的m ...
- 洛谷P3953 逛公园(NOIP2017)(最短/长路,拓扑排序,动态规划)
洛谷题目传送门 又是一年联赛季.NOIP2017至此收官了. 这个其实是比较套路的图论DP了,但是细节有点恶心. 先求出\(1\)到所有点的最短路\(d1\),和所有点到\(n\)的最短路\(dn\) ...
- python3 文件和流
流: 打开文件: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, ...
- 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)
[UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...
- CANOE入门(一)
CANoe是Vector公司的针对汽车电子行业的总线分析工具,现在我用CANoe7.6版本进行介绍,其他版本功能基本差不多. 硬件我使用的是CAN case XL. 1,CANoe软件的安装很简单,先 ...