一、变量

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)

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

2、类变量

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

形式:

变量名 = 值

访问:

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

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

class Person:
country = "中国" #类变量
def __init__(self,age,name):
self.name = name #实例变量
self.age = age #实例变量

p1 = Person("18","iboy") #对象p1
print(p1.country) #中国
p2 = Person("17","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 class Person:
2 country = "中国" #类变量
3 def __init__(self,age,name):
4 self.name = name #实例变量
5 self.age = age #实例变量
6
7 p1 = Person("18","iboy") #对象p1
8 print(p1.country) #中国
9 p2 = Person("17","jacklove") #对象p2
10 print(p2.country) #中国
11 print("--------")
12 Person.country = "中华" #通过类名 修改了类变量country
13 print(p1.country) #中华
14 print(p2.country) #中华
15 print("--------")
16 p1.country = "大清" #通过对象名 是在p1中创建了实例变量country, 并没有修改类变量country
17 print(p1.country) #大清
18 print(p2.country) #中华

二、方法

1、实例方法

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

形式:

def  方法名(self,参数):

  pass

访问:

对象名.方法名(参数)

 1 class Car:
2 def run(self):
3 print("车会跑")
4 def cul(self,a,b):
5 print(a+b)
6 def jump(self):
7 print("you jump,i push")
8 #Car.run() #TypeError: run() missing 1 required positional argument: 'self'
9 c = Car() #创建对象c
10 c.run()
11 c.cul(521,1314)
12 c.jump()
13
14 结果:
15 车会跑
16 1835
17 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

静态方法

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,"19252862163")
#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 是不行的

四、私有

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

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

 1 class Person:
2 def __init__(self, name): # 构造, 创建对象的时候自动调用
3 self.__name = name # 私有的
4
5 def __chi(self): # 私有的
6 print("我要吃. 疯狂的吃")
7
8 def he(self):
9 self.__chi() # 内部调用
10 print("我是喝", self.__name)
11
12 # Person.__chi #类访问私有方法 报错 AttributeError: type object 'Person' has no attribute '__chi'
13 p = Person("哈哈哈")
14 # p.__chi() #对象访问私有方法 报错 AttributeError: 'Person' object has no attribute '__chi'
15 #print(p.__name) #对象访问私有实例变量 报错 AttributeError: 'Person' object has no attribute '__name'
16 p.he() #内部访问 可以
17
18 结果:
19 我要吃. 疯狂的吃
20 我是喝 哈哈哈

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

python学习11-类的成员(转载)的更多相关文章

  1. Python学习:类和实例

    Python学习:类和实例 本文作者: 玄魂工作室--热热的蚂蚁 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规 ...

  2. python基础学习笔记——类的成员

    一. 细分类的组成成员 之前咱们讲过类大致分两块区域,如下图所示: 每个区域详细划分又可以分为: class A: company_name = '老男孩教育' # 静态变量(静态字段) __ipho ...

  3. Python学习--11 面向对象高级编程

    多重继承 Python里允许多重继承,即一个类可以同时继承多个类: class Mammal(Animal): pass class Runnable(object): def run(self): ...

  4. python day 11: 类的补充,元类,魔法方法,异常处理

    目录 python day 11 1. 类的补充 1.1 通过反射来查找类,创建对象,设置对象的属性与方法 1.2 类的魔法方法:getitem,setitem 1.3 元类__metaclass__ ...

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

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

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

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

  7. Python学习笔记——类和对象

    类和对象 1. 一个例子 # 对象 = 属性 + 方法 # Python 中的类名称约定首字母大写,而 Python 函数名首字母小写 class Turtle: #属性 color = 'green ...

  8. Python进阶编程 类的成员

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

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

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

  10. python学习19类5之多态与鸭子模型

    '''''''''一.多态1.Python中多态是指一类事物有多种形态.''' class Animal: def run(self): raise AttributeError('子类必须实现这个方 ...

随机推荐

  1. 20169219 实验四Android程序设计

    一.实现Linux下dc的功能,计算后缀表达式的值 public int evaluate(String expr) { int op1, op2, result = 0; String token; ...

  2. 20145218PC平台逆向破解

    20145218PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同 ...

  3. HTML5 Canvas核心技术:图形、动画与游戏开发 PDF扫描版​

    HTML5 Canvas核心技术:图形.动画与游戏开发 内容简介: <HTML5 Canvas核心技术:图形.动画与游戏开发>中,畅销书作家David Geary(基瑞)先生以实用的范例程 ...

  4. PLSA的EM推导

    本文作为em算法在图模型中的一个应用,推导plsa的em算法. 1 em算法 em算法是解决一类带有隐变量模型的参数估计问题. 1.1 模型的定义 输入样本为,对应的隐变量为.待估计的模型参数为,目标 ...

  5. 新增扩展程序功能打包提交新版 WARNING ITMS-90473 警告问题

    1.问题描述 自从在主应用中加入SiriShortCut功能之后,打包程序上传至 iTunes Connect 就会出现警告,看其原因描述是CFBundleVersion主应用与子应用的不一致导致的 ...

  6. 「CF622F」The Sum of the k-th Powers「拉格朗日插值」

    题意 求\(\sum_{i=1}^n i^k\),\(n \leq 10^9,k \leq 10^6\) 题解 观察可得答案是一个\(k+1\)次多项式,我们找\(k+2\)个值带进去然后拉格朗日插值 ...

  7. JavaScript随机数组(数组、随机、取整、取值的过程)

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  8. char *p="abc" 与 char p[]="abc" 的区别

    本文来源于网络 出处:点我 有这样一段代码: #include "stdio.h" char *get_string_1() { char p[] = "hello wo ...

  9. 泛型1(一些algorithm函数)

    泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作.因此算法可能改变容器中保存的元素,也可能在容器内移动元素,但永远不会直接添加或删除元素. 只读算法: accumulate: ...

  10. 洛谷P4015 运输问题(费用流)

    传送门 源点向仓库连费用$0$,流量为储量的边,商店向汇点连费用$0$,流量为需求的边,然后仓库向商店连流量$inf$,费用对应的边,跑个费用流即可 //minamoto #include<io ...