一.类的成员

class 类名:
# 方法
def __init__(self, 参数1, 参数2....):
# 属性变量
  self.属性1 = 参数1
  self.属性2 = 参数2
....
# 方法
def method(self):
  pass

在上面的代码中__init__和method都属于类的成员方法,又称为实例方法.self.属性1 = 参数1,这个代码的含义是给对象设置属性信息,又被称为成员变量或者实例变量.

二.类的成员-变量

  在类中变量分成两大类:

   1.实例变量/成员变量

   2.类变量

class Person:
# 类变量, 表示所有的该类的对象都共享这个变量.
country = "中国"    def __init__(self, name, num, birthday):
# 实例变量(字段) 表示你创建的每⼀个⼈都有这三个变量
  self.name = name
  self.num = num
  self.birthday = birthday
p1 = Person("alex", 18, "1840年06⽉01⽇")
print(p1.name) # alex
print(p1.country) #中国
p2 = Person("wusir", 28, "1894年07⽉25⽇")
print(p2.name) # wusir
print(p2.country) # 中国
p1 = Person("alex", 18, "1840年06⽉01⽇")
p1.country = "大清"
print(p1.name)
print(p1.country) # 大清
p2 = Person("wusir", 28, "1894年07⽉25⽇")
print(p2.name)
print(p2.country) # 中国

执行p1.country = "大清"的时候,并没有改变类中的country.而是添加了p1中的实例变量,这个实例变量只在p1中存在,在p2中不存在

通过程序来记录当前类被创建了多少个对象.

class Foo:
count = 0
def __init__(self):
Foo.count += 1
print(Foo.count) # 0
Foo()
Foo()
Foo()
print(Foo.count) # 3

好了. 来做个简单的总结:

  实例变量, 给对象用的.

  类变量, 多个对象共享的. 最好是用类名来访问. 这样更加规范.

三.类的成员-方法

  1.成员方法(实例方法)

  2.静态方法

  3.类方法

1.成员方法:

class Computer:

 # 实例方法(成员方法)
def play(self):
print("我的电脑可以玩儿")
c = Computer()
c.play() # 对象直接去调用实例方法

2.静态方法:静态方法不需要我们给方法传递self. 也就是说. 当出现一个方法不需要使用到成员变量的时候. 就可以选择使用静态方法. 静态方法需要我们在方法上面添加一个@staticmethod

@staticmethod
def fare():
print("我的电脑非常牛B, 可以煎鸡蛋")
Computer.fare() # 类名可以直接访问的
c.fare() # 对象也可以访问. 但最好不要这么干. 以便于区分静态方法和实例方法

3.类方法. 类方法和静态方法差不多, 只不过类方法需要在参数列表中的第一个位置预留一个位置, 通常我们给第一个参数起名字叫cls. 类方法在被调用的时候也不需要传递实例对象. 但是. 系统会自动的把类传递给第一个参数. 类方法在编写的时候, 需要在类方法上面添加@classmethod

class Computer:
def play(self):
print("我的电脑可以玩⼉")
@staticmethod
def fare():
print("我的电脑⾮常⽜B, 可以煎鸡蛋")
@classmethod
def cal(cls, a, b):
print(cls)
return a+b
print(Computer.cal(1, 2)) # 此时会自动的把类名传递给类方法的第一个参数

四 类的成员-属性

属性其实就是通过方法改造过来的一种变量的写法, 在方法上添加一个@property就可以 了

class Person:
def __init__(self):
pass
@property
def age(self):
return 1 p = Person()
age = p.age
print(age)
应用场景: 我们一般保存数据的时候, 不会保存一个人的年龄. 因为随着时间的推移. 每个人的年龄都时刻在改变着. 那如何保存更加完美呢? 很简单. 保存出生年月日. 然后用程序来计算,你当前的年龄. 实时的. 那这个时候就需要进行相应的计算了. 而计算属于一个功能. 当然要写方法里了. 但是对于年龄这个属性而言. 他应该是一个数值. 而不是动作. 所以python就提供了这样一种机制. 通过方法来描述一个属性.
注意:
1. 方法参数只能有一个self
2. 方法上方要写@property
3. 调用的时候, 我们不需要写括号. 直接当成属性变量来用就可以了.
4. 这种套路只能取值. 不能设置值

五.私有变量

class Person:
def __init__(self, laopo, mimi):
self.__laopo = laopo # 私有的
self.__mimi = mimi
alex = Person("wusir", "他俩搞基")
print(alex.__mimi) # 私有的. 谁都不能碰

程序报错. 私有的内容是访问不到的. 但是, 这个访问不到是有一定的局限性的. 比如:

class Person:
def __init__(self, laopo, mimi):
self.__laopo = laopo # 私有的
self.__mimi = mimi
def gaosuni(self):
print("大喇叭开始广播了")
return self.__mimi # 私有的内容.在他自己的方法那里, 他可以任意的进行使用
alex = Person("wusir", "他俩搞基")
mimi = alex.gaosuni() # 通过一个非私有的方法, 访问到了他的秘密.
print(mimi)

私有方法:

class Person:
def __init__(self):
pass
def __yue(self):
print("我要约会")
def job(self):
print("我要⼯作")
# self.__yue()#在自己类中访问自己的其他方法. 哪怕是私有的. 也是自己在用
p = Person()
# Person.____yue()#报错
# p.__yue() # 报错
p.job()

需要注意的是, 对于私有的内容而言. 子类是无法继承的.

class Fu:
__qingfu = "情妇_⼩潘潘"
class Zi(Fu):
pass
print(Zi.__qingfu) # 报错

class 类名:
# ⽅法
def __init__(self, 参数1, 参数2....):
# 属性变量
self.属性1 = 参数1
self.属性2 = 参数2
....
# ⽅法
def method(self):
pass

day20 Pyhton学习 面向对象-成员的更多相关文章

  1. day20 Pyhton学习 面向对象-类与类之间的关系

    一.类与类之间的依赖关系 class Elphant: def __init__(self, name): self.name = name def open(self, ref): print(&q ...

  2. python语法学习面向对象之继承

    python语法学习面向对象之继承 转载自:http://www.cnblogs.com/Joans/archive/2012/11/09/2757368.html 只要涉及到面向对象,”类“是必须出 ...

  3. 转 python语法学习面向对象之继承

    传送门 python语法学习面向对象之继承 只要涉及到面向对象,”类“是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念: 包括初始 ...

  4. python学习之-成员信息增删改查

    python学习之-成员信息增删改查 主要实现了成员信息的增加,修改,查询,和删除功能,写着玩玩,在写的过程中,遇到的问题,旧新成员信息数据的合并,手机号和邮箱的验证,#!/usr/bin/env p ...

  5. python学习 day016打卡 面向对象--成员

    本节主要内容: 1.类的成员 2.类的成员-变量 3.类的成员-方法 4.类的成员-属性 5.私有 一.类的成员: 能在类中写的内容就是类的成员. class 类名: #方法 def __init__ ...

  6. Python学习 :面向对象 -- 成员修饰符

    成员修饰符 两种成员 - 公有成员 - 私有成员, __字段名 - 无法直接访问,只能通过内部方法来间接访问私有成员 简例:公有成员与私有成员  class Info: country = '中国' ...

  7. 学习面向对象编程OOP 第二天

    好,今天继续学习这个面向对象编程.(根据博客园 小炒花生米写的博客学习而来) 一,封装性 a.把对象的全部属性和全部服务(方法)结合在一起,形成一个不可分割的独立单元 =>对象 b.信息隐蔽,尽 ...

  8. 学习面向对象编程OOP 第一天

    面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...

  9. Python学习---面向对象的学习[基础]

    面向对象 面向对象的三大特性是指:封装.继承和多态. 说明: Python可以函数式编程,也可以面向对象编程 l 面向过程:根据业务逻辑从上到下写垒代码 l 函数式 :将某功能代码封装到函数中,日后便 ...

随机推荐

  1. leetcode刷题-54螺旋矩阵

    题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 思路 对于每个外层,从左上方开始以顺时针的顺序遍历所有元素.假设当前层的左上角位于(to ...

  2. Eclipse安装Mat工具分析教程

    一.关于Mat MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找内存泄露以及查看内存消耗情况.MAT是基于Eclipse开发的,是一款免费的性能分析工 ...

  3. 微信小程序-组件-基础内容

    1.text 1.作用:类似html的行内元素 2.常用属性: -space值:ensp:中文字符空格一半大小 emsp:中文字符空格大小 nbsp:根据设置字体的大小决定空格大小 -decode:d ...

  4. Python实现加密的ZIP文件解压(密码已知)

    博主在上篇博文介绍了<Python实现加密的RAR文件解压(密码已知)>后,又尝试了ZIP文件的解压方法,下面开始分享. 当ZIP文件的压缩密码已知时,可以通过调用zipfile库进行解压 ...

  5. Oracle闪回flashback

    参考资料:Using Oracle Flashback Technology Oracle 11g的新特性闪回操作 闪回查询 闪回查询 闪回版本查询 闪回事务查询 闪回数据 闪回表 闪回删除 闪回数据 ...

  6. LuoGu P1909 买铅笔???

    题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔. ...

  7. 基于abp的小小设备控制系统设计

    客户有一堆小设备,需要通过小程序来控制它们,主要是设备门的开关.电源开关.状态查询.压力控制等.下面主要纪录下设计思路.源码地址:https://gitee.com/bxjg1987/abp 最初的设 ...

  8. 20行代码实现,使用Tarjan算法求解强连通分量

    今天是算法数据结构专题的第36篇文章,我们一起来继续聊聊强连通分量分解的算法. 在上一篇文章当中我们分享了强连通分量分解的一个经典算法Kosaraju算法,它的核心原理是通过将图翻转,以及两次递归来实 ...

  9. Java高级开发必会的50个性能优化的细节(珍藏版)

      在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. ● 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短 ...

  10. Oracle学习(十二)标量函数

    UCASE()大写转换  LCASE()小写转换 --把查询结果对应的列进行大写转换 SELECT UCASE(列) FROM 表; --把查询结果对应的列进行小写转换 SELECT LCASE(列) ...