##################################总结###########################

类的成员:
  变量:
    实例变量      对象.属性=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 面向对象(二)成员的更多相关文章

  1. python面向对象(二)——类成员

    Python面向对象    类成员 1.字段         普通字段    属于对象         静态字段    属于类   2.方法 普通方法   触发者是对象    括号里至少一个参数 se ...

  2. python面向对象之类成员

    面向对象编程: OOP编程是利用类和对象来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得简单,并可以大大提高程序开发效率.另外,基于面向对象的程序可 ...

  3. python面向对象二

    1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Stud ...

  4. JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链

      前  言 JRedu 上一篇博客中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方 ...

  5. Python面向对象之成员修饰符

    对于这些类成员有修饰符 之前定义字段country任何对象都可以访问,是公有的 可以定义为私用属性,只有类内部的方法可以调用,外部不能直接调用,但是可以间接调用 vim day7-10.py #!/u ...

  6. Python面向对象-类成员

    类的成员可以分为三大类:字段.方法和属性: 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在 ...

  7. python 面向对象二 类和实例

    一.类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法, ...

  8. 疯狂java学习笔记之面向对象(二) - 成员变量与局部变量

    Java变量按其作用域可分为:成员变量和局部变量.注意:在Java中是没有全局变量这个概念的 一.成员变量: 成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰 实例变量的 ...

  9. python面向对象之类成员修饰符

      类的所有成员分为: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能访问 私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线.(特殊成员除外,例如:__init__.__c ...

随机推荐

  1. 洛谷P1582 倒水题解

    题目 分析 这个题并不难,只是需要仔细思考我们首先可以很轻松的把这个题给疏通一下题意. 1:首先我们最后每个瓶子中装的水一定是一个$2^x$,因为每次都是$2$倍的加,这个应该很好理解. 2:我们要明 ...

  2. bzoj 2733 : [HNOI2012]永无乡 (线段树合并)

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  3. PHP linux ZendGuardLoader.so: undefined symbol: executor_globals

    /usr/xxx/php    xxx/xxx.php 报了这个错. 本人出现此问题的原因:  php执行程序路径错了. 解决: linux下执行   which php   命令  查看php真实路 ...

  4. MT【271】一道三角最值问题

    若不等式$k\sin^2B+\sin A\sin C>19\sin B\sin C$对任意$\Delta ABC$都成立,则$k$的最小值为_____ 分析:由正弦定理得$k>\dfrac ...

  5. linux中监控CPU、内存和磁盘状态的shell脚本。(centos7)

    这篇博客中所写的脚本,在实际工作中并没有什么卵用,工作中并不会用到这种脚本去监控.不过自己写一遍,可以让初学者对CPU.内存.磁盘等一些基础知识和基础命令更加了解. 1.利用vmstat工具监控CPU ...

  6. 【arc073e】Ball Coloring(线段树,贪心)

    [arc073e]Ball Coloring(线段树,贪心) 题面 AtCoder 洛谷 题解 大型翻车现场,菊队完美压中男神的模拟题 首先钦定全局最小值为红色,剩下的袋子按照其中较大值排序. 枚举前 ...

  7. 【BZOJ5317】[JSOI2018]部落战争(凸包,闵可夫斯基和)

    [BZOJ5317][JSOI2018]部落战争(凸包,闵可夫斯基和) 题面 BZOJ 洛谷 题解 很明显我们只需要两个凸包\(A,B\). 假设询问给定的方向向量是\(v\). 那么现在就是判断\( ...

  8. linux rpm安装 failed depenencie(失败的依赖关系)错误原因

    rpm安装nfs 出现failed depenencie 经查资料得知命令后加上--nodeps --force,就可以了 加上那两个参数的意义就在于,安装时不再分析包之间的依赖关系而直接安装,也就不 ...

  9. Annihilate(SA)

    题目描述 黑暗之主的蜈蚣几乎可以毁灭一切,因此小正方形陷入了苦战…… 小正方形现在需要减弱黑暗之主的攻击. 一个黑暗之主的攻击可以用一个仅有小写字母的字符串表示. 现在黑暗之主向小正方形发动了若干攻击 ...

  10. PID 通俗解释

    PID 控制原理3 个故事:看完您就明白了.1.: PID 的故事小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就 ...