一、变量

1、实例变量(又叫字段、属性)

创建对象时给对象赋值

形式:

self.xxx = xxx

访问:

对象名.xxx     只能由对象访问

 class Person:
def __init__(self,age,name):
self.name = name #实例变量
self.age = age #实例变量
p1 = Person(18,"iboy")
print(p1.name) #通过对象名访问实例变量 p1.hobby = "打游戏" #这是在当前类中添加一个实例变量
print(p1.hobby)

2、类变量

直接写在类中的变量,给类赋值

形式:

变量名 = 值

访问:

类名/对象名.xxx   类名和对象名都能访问,但是只能通过类名来修改变量值。通过对象名修改,相当于在当前对象中增加了一个实例变量

一般把对象中的共性抽出来作为类变量

 class Person:
country = "中国" #类变量
def __init__(self,age,name):
self.name = name #实例变量
self.age = age #实例变量 p1 = Person("","iboy") #对象p1
print(p1.country) #中国
p2 = Person("","jacklove") #对象p2
print(p2.country) #中国
print("--------")
Person.country = "中华" #通过类名 修改了类变量country
print(p1.country) #中华
print(p2.country) #中华
print("--------")
p1.country = "大清" #通过对象名 是在p1中创建了实例变量country, 并没有修改类变量country
print(p1.country) #大清
print(p2.country) #中华

二、方法

1、实例方法

直接写在类中的方法,只能由对象调用

形式:

def  方法名(self,参数):

  pass

访问:

对象名.方法名(参数)

 class Car:
def run(self):
print("车会跑")
def cul(self,a,b):
print(a+b)
def jump(self):
print("you jump,i push")
#Car.run() #TypeError: run() missing 1 required positional argument: 'self'
c = Car() #创建对象c
c.run()
c.cul(521,1314)
c.jump() 结果:
车会跑
1835
you jump,i push

2、类方法

在声明时加上@classmethod装饰的方法

形式:

@classmethod

def 方法名(cls):

  pass

访问:

类名/对象名.方法名()

class Person:
def chi(self): #实例方法
print("人要吃饭")
@classmethod
def he(cls): # 这是类方法,可以通过类和对象名访问
print(cls)
print("人要喝水") Person.he()
p = Person()
p.he() 结果:
<class '__main__.Person'>
人要喝水
<class '__main__.Person'>
人要喝水

3、静态方法

声明时加@staticmethod 装饰的方法,相当于在类中定义的一个普通函数

形式:

@staticmethod

def  方法名():

  pass

访问:

类名/对象名.方法名()

class Person:

    def chi(self): # 实例方法
print("人在吃") # 类方法
@classmethod # 类方法
def he(cls): # cls 类
print(cls)
print("我是喝") @staticmethod
def sleep(): # 在类中定义的一个普通函数,不带参
print("和你睡不等于睡你 -- 姜文") @staticmethod
def fly(height): # 在类中定义的一个普通函数,带参
print("上天%s" % height)
Person.sleep()
Person.fly(500)
p = Person
p.sleep()
p.fly(500) 结果:
和你睡不等于睡你 -- 姜文
上天500
和你睡不等于睡你 -- 姜文
上天500

静态方法

三、属性方法

通过@property 把一个方法变成一个实例变量来使用,我自称为属性方法,就是本来是一个方法,但是有属性的效果。

形式:

@property

def 方法名(self):

  return  值

访问:

对象名.方法名

class Person:
def __init__(self,name,birthday,qq):
self.name = name
self.birthday = birthday
self.qq = qq @property
def age(self):
return 2018-self.birthday
p1 = Person("王三",1995,"")
#print(p1.age()) # TypeError: 'int' object is not callable age是不可调用的
print(p1.age) # 23 可以像属性一样用
print(Person.age) # 通过类名访问访问不到 <property object at 0x0000000001E18EF8>

!!!注意:

函数只能有一个self 参数

函数必须有返回值

不能给该属性赋值    像p1.age = 10 是不行的

四、私有

在变量名或方法名前面加__作为前缀就表示这是私有的

私有的东西只能类自己内部访问

 class Person:
def __init__(self, name): # 构造, 创建对象的时候自动调用
self.__name = name # 私有的 def __chi(self): # 私有的
print("我要吃. 疯狂的吃") def he(self):
self.__chi() # 内部调用
print("我是喝", self.__name) # Person.__chi #类访问私有方法 报错 AttributeError: type object 'Person' has no attribute '__chi'
p = Person("哈哈哈")
# p.__chi() #对象访问私有方法 报错 AttributeError: 'Person' object has no attribute '__chi'
#print(p.__name) #对象访问私有实例变量 报错 AttributeError: 'Person' object has no attribute '__name'
p.he() #内部访问 可以 结果:
我要吃. 疯狂的吃
我是喝 哈哈哈

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

python记录_day16 类的成员的更多相关文章

  1. python 面向对象(类的成员,属性,绑定和非绑定,)

    面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...

  2. python中的类的成员变量以及property函数

    1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...

  3. Python进阶编程 类的成员

    类的成员 class A: company_name='老男孩' #静态变量 __iphone='1515151' #私有静态变量 def __init__(self,name,age): #特殊方法 ...

  4. python基础(26):类的成员(字段、方法、属性)

    1. 字段 字段:包括普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同. 普通字段属于对象 静态字段属于类 字段的定义和使用: class Province: # ...

  5. python记录_day019 类的约束 异常处理 日志

    一 .约束 python中约束有两种 第一种,通过抛异常进行约束,这种是子类不按我要求的来,我就给你抛异常(推荐) 操作:提取一个父类. 在父类中给出一个方法.但在方法中不给出任何代码,直接抛异常 # ...

  6. python记录_day17 类与类之间的关系

    一.依赖关系 a类的对象是b类方法的参数 这种关系是我用着你,但你不属于我,比如公司和临时工的关系,是很弱的一种关系 class Zhiwu: def __init__(self,name,atk): ...

  7. Python入门-类的成员

    昨天我们简单的认识了一下面向对象,以及和面向过程之间的区别,从而我们知道了类这个东西,今天我们就来详细的了解一下关于类的一些东西. 一.类的成员 首先, 什么是类的成员,很简单, 你能在类中写什么? ...

  8. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  9. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

随机推荐

  1. Many Website Of WallPaper

    我在这里给大家推荐几个不错的壁纸网站 毕竟一张赏心悦目的壁纸能让你的工作效率提高不少 注意前方高能 一大波网站即将来袭 一系列 如你所见 alphacoders wallpaperdj Wallhav ...

  2. 到底什么是 ROI Pooling Layer ???

    到底什么是 ROI Pooling Layer ??? 只知道 faster rcnn 中有 ROI pooling, 而且其他很多算法也都有用这个layer 来做一些事情,如:SINT,检测的文章等 ...

  3. Python 爬取 猫眼 top100 电影例子

    一个Python 爬取猫眼top100的小栗子 import json import requests import re from multiprocessing import Pool #//进程 ...

  4. 关于C++中的friend友元函数的总结

    1.友元函数的简单介绍 1.1为什么要使用友元函数 在实现类之间数据共享时,减少系统开销,提高效率.如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数. ...

  5. 1:Javascript的数据类型和相互转换

    第一节:JavaScript的数据类型 他是弱类型 var 但是正是由于其实弱类 所以其后台的数据类型转换也是我们值得思考的 JavaScript的数据类型有两种 一种是原始类型  另外一种是对象类型 ...

  6. JaveWeb 公司项目(6)----- 通过ToolTip给控件添加动态注释

    现在公司的项目进展到了视屏这一块,关于海康网页端的构建我会另外写一篇博客来详细讲解,这一篇的博文主要讲的是我刚刚遇到的一个小问题 连接上了视屏之后,将控制按钮换成图标,方位按钮比较好理解,调焦调距的按 ...

  7. memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory

    1.在http://libevent.org/   下载libevent-2.0.22-stable.tar.gz 2.tar -zxvf libevent-2.0.22-stable.tar.gz ...

  8. python中enumerate内置库的使用

    使用enumerate,可以自动进行索引下标的赋值,本例代码中使用enumerate,进行excel单元格的赋值操作. 代码如果重复被调用,可将该代码封装成类进行使用 1 import openpyx ...

  9. STL_string.vector中find到的iterator的序号

    ZC:注意,printf("0x%08X\n",vtr.end()); 打印出来 应该就是 0x00000000,∵ 它就是 指向最后一个元素的后面,应该是理解成 无意义      ...

  10. 力扣(LeetCode)415. 字符串相加

    给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包 ...