本节主要内容:

1.类的成员

2.类的成员-变量

3.类的成员-方法

4.类的成员-属性

5.私有

一.类的成员:

能在类中写的内容就是类的成员.

  1. class 类名:
  2. #方法
  3. def __init__(self,参数1,参数2,...):
  4. #属性变量
  5. self.属性1 = 参数1
  6. self.属性2 = 参数2
  7. ...
  8. #方法
  9. def method(self):
  10. pass

在上面的代码中__init__和method都属于类的成员方法.又称为实例方法.总之这样的东西需要对象来访问.

而上方的self.属性1 = 参数1 这个代码的含义是给对象设置属性信息.含义是这个对象的xxx属性是xxx.这种

东西被称为成员变量或者实例变量,再或者被称为字段.

二.类的成员-变量

在类中变量分成两大类:

1.实例变量(字段)

2.类变量(静态变量)

  1. class Person:
  2. country = "中国"  #类变量
  3. def __init__(self,name, age):
  4. self.name = name  #实例变量
  5. self.age = age
  6.  
  7. # Person.country = "大清"
  8. # print(Person.country) # 直接使用类名进行访问
  9. p1 = Person("alex", 185)
  10. p1.country = "大清" # 添加了一个实例变量
  11. print(p1.name)
  12. print(p1.country)
  13.  
  14. p2 = Person("wusir", 145)
  15. print(p2.name)
  16. print(p2.country)
  17.  
  18. # 类变量的修改只能通过类

总结:

实例变量,给对象用的.

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

二.类的成员-方法

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

2.静态方法

3.类方法

成员方法:对象直接访问的方法叫成员方法

  1. class Car:
  2. def run(self):
  3. print("会跑的车")
  4.  
  5. def cul(self, a, b):
  6. return a + b
  7.  
  8. def jump(self):
  9. print("you jump i jump")
  10.  
  11. c = Car()
  12. c.run() # 调用实例方法
  13. print(c.cul(1 , 3))
  14. c.jump()

静态方法.静态方法不需要我们给方法传递self.也就是说.当出现一个方法不需要使用到成员变量的时候,就可以选择使用静态方法.

静态方法需要我们在方法上面添加一个@staticmethod

  1. class Person:
  2.  
  3. def chi(self): # 实例方法
  4. print("人在吃")
  5.  
  6. # 类方法
  7. @classmethod # 类方法
  8. def he(cls): # cls 类
  9. print(cls)
  10. print("我是喝")
  11.  
  12. @staticmethod
  13. def shui(): # 在类中定义的一个普通函数
  14. print("和你睡不等于睡你 -- 姜文")
  15.  
  16. @staticmethod
  17. def 上天(height): # 在类中定义的一个普通函数
  18. print("上天%s" % height)
  19.  
  20. print(Person)
  21. Person.he()
  22.  
  23. p = Person()
  24. p.he() # 不管用对象还是用类去访问类方法. 默认传递进去的是类
  25.  
  26. Person.shui()
  27. Person.上天(500)
  28.  
  29. p = Person()
  30. p.shui()

静态方法和静态变量一样.一般都是使用类名直接访问和调用的.

类方法.类方法和静态方法差不多,只不过类方法需要在参数列表中的第一个位置预留一个位置,通常我们给第一个参数起名字叫cls.

类方法在被调用的时候也不需要传递实例对象.但是系统会自动的吧类传递给第一个参数.类方法在编写的时候需要在类方法上面添

加@classmethod

三.类的成员-属性

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

  1. class User:
  2. def __init__(self,name,birthday,id):
  3. self.name = name
  4. self.birthday = birthday
  5. self.id = id
  6.  
  7. @property # 可以把一个方法变成一个属性
  8. def age(self):
  9. return 2018 - self.birthday
  10.  
  11. u = User("wsx",1988,100)
  12. print(u.age)

应用场景:我们一般保存数据的时候,不会保存一个人的年龄.因为随着时间的推移.每个人的年龄都时刻在改变着.那如何保存更加完美呢?

很简单.保存出生年月日.然后用程序来计算当前的年龄.实时的.这个时候需要进行相应的计算了.二计算属于一个功能.当然要写在方法里.

但是对于年龄这个属性而言,他就是一个数值,而不是动作,所以python就提供了这样一种机制,通过方法来描述一个属性.

注意:

1.方法参数只能有一个self

2.方法上方要写@property

3.调用的时候,我们不需要写括号.直接当成属性变量来用就可以了.

4.这种套路只可以取值,不能设置值

四.私有

在python中,一般是不提倡设置和使用私有信息的.但有些场景,我们不得不这么做.

在python中使用__作为方法或者变量的前缀,name这个方法或者变量就是私有的

  1. class Person:
  2. def __init__(self,laopo,mimi):
  3. self__laopo = laopo
  4. self__mimi = mimi
  5.  
  6. alex = Person("wusir","他俩搞基")
  7. print(alex.__mimi) #私有的,访问不到.报错

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

  1. class Person:
  2. def __init__(self,laopo,mimi):
  3. self.__laopo = laopo
  4. self.__mimi = mimi
  5.  
  6. def gaosuni(self):
  7. print("大喇叭开始广播了")
  8. return self.__mimi #私有的内容,在类的内部,可以任意进行使用
  9.  
  10. alex = Person("wusir","他俩搞基")
  11. mimi = alex.gaosuni() # 通过一个非私有的方法,访问到了私有内容
  12. print(mimi)

记住,私有的内容不能直接访问.但是如果对方开辟了外界访问的通道(公共方法).那可以通过这个公共的方法来获取私有的内容.

这样做的好处是,外界只能看,凡是改不了.

不单单实例变量有私有的,类变量(静态变量)一样拥有这样的属性.

2.私有方法.

私有方法,顾名思义,只能自己访问的方法,别人都不能随便调用的

  1. class Person:
  2. def __init__(self, name): # 构造, 创建对象的时候自动调用
  3. self.__name = name # 私有的
  4. print("这里是构造方法")
  5.  
  6. def init(self):
  7. print("实例方法")
  8.  
  9. def __chi(self): # 私有的
  10. print("我要吃. 疯狂的吃")
  11.  
  12. def he(self):
  13. self.__chi() # 内部调用
  14. print("我是喝", self.__name)
  15.  
  16. p = Person("孙艺珍")
  17. p.he()

__chi是一个私有的方法,只能在类中自己调用,类外面不能访问.

同样的.私有方法也是相对而言的,我们可以通过其他方法来访问到这样的方法.

关于类方法和静态方法,和成员方法一样,

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

python学习 day016打卡 面向对象--成员的更多相关文章

  1. Python学习-第三天-面向对象编程基础

    Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...

  2. python学习 day15打卡 初识面向对象

    本节主要内容: 1.面向对象和面向过程 2.面向对象如何编写 3.面向对象和面向过程的对比 4.面向对象的三大特征 一.面向对象和面向过程(重点理解) 1.面向过程:一切以事物的流程为核心.核心是&q ...

  3. Python学习(18)面向对象

    目录 Python 面向对象 创建实例对象 Python内置类属性 Pyyhon对象销毁(垃圾回收) 类属性与方法 Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此 ...

  4. python 学习笔记9(面向对象)

    面向过程.函数式.面向对象 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象(Object Oriented Programmin ...

  5. python学习笔记六 初识面向对象上(基础篇)

    python面向对象   面向对象编程(Object-Oriented Programming )介绍   对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...

  6. python学习之路-8 面向对象之进阶

    上篇内容回顾和补充 面向对象三大特性 封装 继承 多态 在python中没有多态的概念 变量的类型允许为多种数据类型称之为多态 # c#/java中的多态 # 伪代码 def func(int arg ...

  7. python学习 day017打卡 类与类之间的关系

    本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员 一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖 ...

  8. python学习 day013打卡 内置函数

    本节主要内容: 内置函数: 内置函数就是python给你提供的.拿来直接用的函数,比如print,input等等.截止到python版本3.6.2 python一共提供了68个内置函数.他们就是pyt ...

  9. Python学习(七)面向对象 ——类和实例

    Python 面向对象 —— 类和实例 类 虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程.至于何为面向对象,在此就不详说了.面向对象程序设计本身就很值得深入学习,如要了解,请 ...

随机推荐

  1. golang学习笔记15 golang用strings.Split切割字符串

    golang用strings.Split切割字符串 kv := strings.Split(authString, " ") if len(kv) != 2 || kv[0] != ...

  2. [转载]SQL Server中的事务与锁

    了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...

  3. Piggy-Bank HDU - 1114

    Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. ...

  4. echo 换行与否

    echo默认是有换行的, -n的时候, 是不换行的.

  5. Eloquent JavaScript #11# The Document Object Model

    索引 Notes js与html DOM 在DOM树中移动 在DOM中寻找元素 改变Document 创建节点 html元素属性 布局 style CSS选择器 动画 Exercises Build ...

  6. 使用v-for指令渲染列表

    v-for:对集合或对象进行遍历: 使用v-for对数组遍历时: 效果如下: 代码: <script> window.onload= () =>{new Vue({ el:'#two ...

  7. 用switch语句根据消费金额计算折扣

    最终输出效果: 代码: package com.mingrisoft; import java.util.Scanner; public class ProductPrice { public sta ...

  8. GitHub客户端使用

    GitHub客户端使用 我们今天先讲解一下Github for windows(客户端)的使用方法,之后我们会以一个实例一步一步的来讲解Github. Github for windows(客户端)是 ...

  9. Nginx:论高并发,在座各位都是渣渣

    NGINX 在网络应用中表现超群,在于其独特的设计.许多网络或应用服务器大都是基于线程或者进程的简单框架,NGINX突出的地方就在于其成熟的事件驱动框架,它能应对现代硬件上成千上万的并发连接. NGI ...

  10. sentos7为例添加python3和python2共存

    转载:https://www.cnblogs.com/JahanGu/p/7452527.html 1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命 ...