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 ...
随机推荐
- BZOJ2275[Coci2010]HRPA——斐波那契博弈
题目描述 N个石子,A和B轮流取,A先.每个人每次最少取一个,最多不超过上一个人的个数的2倍.取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个. 输入 第一行给出数字N,N< ...
- ceil以及double的精度问题
Codeforces Round #518 (Div. 2) A CF一道水题,总过不去 后面看了一下数据发现是精度出问题了 1000000000000000000 1 1 1000000000000 ...
- 如何使用JPQL写纯SQL语句
使用JPQL,需要把SQL语句修改成类似HQL 语句.SQL 查询的是数据库,而JPQL 查询的是对象和属性,在语法上是有些不同的.对于有些用JPQL 无法写出来的查询,还是使用原生SQL写出来方便 ...
- 正睿 2019 省选附加赛 Day10
A 核心就是一个公式 \[\sum_{i = 0}^{k} S(k, i) \tbinom{x}{i} i\] S是第二类斯特林数 递推公式 \(S_2(n,k)=S_2(n−1,k−1)+kS_2( ...
- Android ViewSwitcher 的功能与用法
ViewSwitcher 代表了视图切换组件, 本身继承了FrameLayout ,可以将多个View叠在一起 ,每次只显示一个组件.当程序控制从一个View切换到另个View时,ViewSwitch ...
- 【BZOJ5314】[JSOI2018]潜入行动(动态规划)
[BZOJ5314][JSOI2018]潜入行动(动态规划) 题面 BZOJ 洛谷 题解 不难想到一个沙雕\(dp\),设\(f[i][j][0/1][0/1]\)表示当前点\(i\),子树中一共放了 ...
- [luogu2446][bzoj2037][SDOI2008]Sue的小球【区间DP】
分析 简单区间DP, 定义状态f[i][j][0/1]为取完i-j的小球最后取i/j上的小球所能获得的最大价值. 排序转移. ac代码 #include <bits/stdc++.h> # ...
- Java io概述
内容来源:http://ifeve.com/java-io/ Java IO 概述 输入流可以理解为向内存输入,输出流可以理解为从内存输出 Java的IO包主要关注的是从原始数据源的读取以及输出原始数 ...
- C# Winfrom 进程&多线程
进程: 首先需要引用命名空间: using systemDiagnostics; 最简单的打开进程的方法,进程名并不是汉字: Process.start("calc");//cla ...
- 洛谷P1463 反素数
经典题了,很难想到这TM是搜索...... 题意:求[1, n]中约数最多的数中最小的. 解:我们有约数个数定理. 所以考虑通过枚举每个质因数个数来直接计算出约数个数. 然后就可以搜索了. 注意:若p ...