一 . 成员

  在类中你能写的所有内容都是类的成员

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

  在上⾯代码中__init__和method都属于类的成员⽅法. ⼜称为实例⽅法. 总之这样的东⻄
    需要⽤对象来访问. ⽽上⽅的self.属性1 = 参数1 这个代码的含义是给对象设置属性信息. 含
      义是这个对象的xxx属性是xxxx. 这种东⻄⼜被称之为成员变量或者实例变量, 再或者被称之
        为字段. 都是⼀个意思.

二 . 变量

  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和p2的name都是对象⾃⼰的. 但是country是类的. ⼤家公⽤同⼀个变量.
  如何来验证呢?

Person.country = "⼤清" # 在这里. 我把国家改成了大清
p1 = Person("alex", 18, "1840年06⽉01⽇")
print(p1.name)
print(p1.country) # alex是大清的
p2 = Person("wusir", 28, "1894年07⽉25⽇")
print(p2.name)
print(p2.country) # wusir也是大清的

  简单的总结一下:

    实例变量,给对象用的.

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

三 . 方法

  1.  成员方法(实例方法) : 对象直接访问的方法叫成员方法.

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

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

@staticmethod
def fare():
print("我的电脑⾮常⽜B, 可以煎鸡蛋")

  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. 这种套路只能取值. 不能设置值

五 . 私有

  在python中, 一般是不提倡设置和使用私有信息的, 但有些场景我们不得不这么做, 比如,在一个公司, 每个人的收入情况, 这种内容是绝对不能公开的.

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

  1. 私有变量

class Person:
def __init__(self, wife, secret):
self.__wife = wife # 私有的
self.__secret = secret
def speak(self):
print("⼤喇叭开始⼴播了")
return self.__secret # 私有的内容.在他自己那里, 他可以任意的进行使用
alex = Person("吴彦祖","最帅")
mimi = alex.speak() # 通过一个非私有的方法, 访问到了他的秘密.
print(secret)

  2. 私有方法

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

class Person:
def __init__(self):
pass
def __yue(self):
print("我要约会")
def job(self):
print("我要⼯作")
p = Person()
# p.__yue() # 报错
p.job()

  __yue是⼀个私有的⽅法. 只能在类中⾃⼰调⽤. 类外面不能访问. job 是一个成员方法,并不是一个开放的方法. 在类外界可以被访问到.

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

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

  

python之路--面向对象-成员的更多相关文章

  1. 百万年薪python之路 -- 面向对象之所有属性及方法

    1.私有成员公有成员 1.1 类的私有属性 # class A: # # name = '周道镕' # __name = 'zdr' # 私有类的属性 # # def func(self): # pr ...

  2. python之路面向对象2

    一.利用反射查看面向对象成员的归属 二.利用反射导入模块.查找类.创建对象.查找对象中的字段 三.静态字段 静态字段存在类中,把对象每个都有的存在类中就行了,只存一份 四.静态方法 静态方法中没有se ...

  3. python之路——面向对象(进阶篇)

    面向对象进阶:类成员.类成员的修饰符.类的特殊成员 类成员 类成员分为三大类:字段.方法.属性 一.字段 静态字段 (属于类) 普通字段(属于对象) class City: # 静态字段 countr ...

  4. python之路--面向对象(三)

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象.由于Python中一切都是类,所以 ...

  5. python之路----面向对象的多态特性

    多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstr ...

  6. NO.6:自学python之路------面向对象、内存持久化

    引言 虽然加速学习了,可是还是感觉进度不够快,担心.还得准备毕业论文,真是焦虑. 正文 面向对象 编程是程序员用特定语法+数据结构+算法组成的代码,告诉计算机如何执行任务的过程.对不同的编程方式的特点 ...

  7. python之路——面向对象进阶

    阅读目录 isinstance和issubclass 反射 setattr delattr getattr hasattr __str__和__repr__ __del__ item系列 __geti ...

  8. python之路 面向对象基础 XML

    一.面向对象基础 1.类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...

  9. 百万年薪python之路 -- 面向对象之继承

    面向对象之继承 1.什么是面向对象的继承 继承(英语:inheritance)是面向对象软件技术当中的一个概念. 通俗易懂的理解是:子承父业,合法继承家产 专业的理解是:子类可以完全使用父类的方法和属 ...

随机推荐

  1. docker swarm:Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable

    环境:cetos7 描述:创建完docker swarm,想把node主机加入swarm中,执行以下命令时,报错 无法连接! 原因是:防火墙!!!!!!!没关!!!! 解决办法是:关闭防火墙

  2. UVA1620-Lazy Susan(思维+逆序对)

    Problem UVA1620-Lazy Susan Accept: 81  Submit: 375Time Limit: 3000 mSec Problem Description There ar ...

  3. P2360 地下城主(BFS)

    感觉这道题还是蛮简单的,不过使使用了4个队列(其实只是一个)emmmmm,还是很好的 #include<iostream> #include<string> #include& ...

  4. 一、springBoot简介与环境搭建

    前言:学习计划 1.springBoot环境搭建 2.springBoot入门 3.srpingBoot整合Mybatis 4.springBoot整合Redis,Redis集群 5.springBo ...

  5. 自动化测试中依据元素实时截图,比较元素图片是否一致(selenium和appium通用)

    1.根据元素的上下左右的坐标进行截图 2.先安装pillow 3.下面是截图 4.下面是比较两张图片的值 5.截取两张图片,然后对两张图片比对,这种场景,可以在测试视频播放.图片显示页面做验证.

  6. day09--函数的定义分类以及其使用(1)

    一.函数的定义以及分类: 什么是函数:函数是可以重复调用来完成特定功能的代码块.-----(重复利用的工具) """ 1 什么是函数?重复利用的工具————可以完成特定功 ...

  7. linux内存源码分析 - 零散知识点

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 直接内存回收中的等待队列 内存回收详解见linux内存源码分析 - 内存回收(整体流程),在直接内存回收过程中, ...

  8. 【C#复习总结】 Async 和 Await 的异步编程

    谈到异步,必然要说下阻塞,在知乎上看到了网友举的例子非常省动,在这里我引用下. 怎样理解阻塞非阻塞与同步异步的区别? 老张爱喝茶,废话不说,煮开水. 出场人物:老张,水壶两把(普通水壶,简称水壶:会响 ...

  9. H5海报制作实践

    引言 年后一直处于秣马厉兵的状态,上周接到了一个紧急需求,为38妇女节做一个活动页,主要功能是生成海报,第一次做这种需求,我也是个半桶水前端,这里将碰到的问题.踩的坑,如何解决的分享给大家,讲的不到位 ...

  10. MVC简单用户登录授权认证

    1.控制器上面用 [Authorize] 属性标识,表示当前控制器内的所有函数需要用户认证才能访问 2.函数上面用 [AllowAnonymous] 属性标识,表示当前函数不需要用户认证可以直接访问 ...