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 ...
随机推荐
- POJ3013-Big Christmas Tree-最短路
题意:给出一个图,每个节点都有权值,每条边也有费用.要求建立一颗树,使总花费最小.树上每连一条边的花费定义为孩子节点权值和×此边费用. 做法:分析可知,最终的答案为所有节点的权值×到根节点的距离.可以 ...
- 洛谷P2320鬼谷子的钱袋.
题目 这个题考察二进制分解. \(Code\) #include <bits/stdc++.h> #pragma GCC optimize(2) #pragma GCC optimize( ...
- [洛谷P1730] 最小密度路径
类型:Floyd 传送门:>Here< 题意:定义一条路径密度 = 该路径长度 / 边数.给出一张$DAG$,现有$Q$次询问,每次给出$X,Y$,问$X,Y$的最小密度路径($N \le ...
- NEW —— Code
http://ai.baidu.com/ 百度AI开放平台
- nmap 常用命令
10.1.1.0/24 = 10.1.1.1-10.1.1.255 #c段扫描10.1.1.0/16 = 10.1.1.1-10.1.255.255 #b段扫描10.1.1.0/8 = ...
- 【BZOJ5324】[JXOI2018]守卫(动态规划)
[BZOJ5324][JXOI2018]守卫(动态规划) 题面 BZOJ 洛谷 题解 既然只能看到横坐标在左侧的点,那么对于任意一个区间\([l,r]\)而言,\(r\)必须被选. 假设\(r\)看不 ...
- 一种使用 emwin 绘制图片的方法
@2018-12-10 [小记] 使用官方 <GUIBuilder.exe> 软件里的 Image 控件,注意格式为 .bmp,这种方式是将图片数据直接转为十六进制数据存储至静态区 具体使 ...
- luogu3250 网络 (整体二分+树上差分+树状数组)
首先整体二分,问题变成是否存在经过一个点的满足条件的路径 那么我对于每个路径(a,b,lca),在树状数组的dfn[a]++,dfn[b]++,dfn[lca]--,dfn[fa[lca]--] 然后 ...
- 20165223《JAVA程序设计》第二周学习总结
20165223 <JAVA程序设计>第二周学习总结 教材学习内容总结 第二章要点 标识符与关键字 基本数据类型 类型转换运算 输入输出数据 数组 第三章要点 运算符与表达式 语句概述 i ...
- 20165223 week2测试补交与总结
测试题二 题目: 在Ubuntu或Windows命令行中 建如下目录结构 Hello.java的内容见附件package isxxxx; (xxxx替换为你的四位学号) 编译运行Hello.java ...