python类的详解
python(类方法、静态方法、类结构)一、类方法类方法:针对类对象定义的方法 在类方法内部可以直接访问类属性或者调用其他的类方法类属性:针对类对象定义的属性 使用赋值语句在class关键字下可以定义类属性类属性用于记录与这个类相关的特性class Toy(object):# 1.使用赋值语句定义类属性,记录所有玩具的数量count = 0def __init__(self,name):self.
python(类方法、静态方法、类结构)
一、类方法
类方法:针对类对象定义的方法 在类方法内部可以直接访问类属性或者调用其他的类方法
类属性:针对类对象定义的属性 使用赋值语句在class关键字下可以定义类属性
类属性用于记录与这个类相关的特性
class Toy(object):
# 1.使用赋值语句定义类属性,记录所有玩具的数量
count = 0
def __init__(self,name):
self.name = name
# 让类属性 +1
Toy.count += 1
@classmethod
def show_toy_count(cls):
print('玩具对象的数量 %d' %(cls.count))
# 创建玩具对象
toy1 = Toy('乐高')
#toy2 = Toy('泰迪熊')
# 调用类方法
Toy.show_toy_count()
二、静态方法
静态方法:
在开发中,如果需要在一个类中封装一个方法 这个方法
既不需要访问实例属性或者调用实例方法
也不需要访问类属性或者调用类方法
这个时候,我们就可以把这个方法封装成一个镜头方法
class Cat(object):
@staticmethod
def call():
print('喵喵~')
# 通过 类名. 调用静态方法
Cat.call()
不需要创建对象,直接就可以使用
三、类的结构
术语–实例
1.使用面向对象开发,第一步是设计类
2.使用 类名() 创建对象,创建对象的动作有两步
(1)在内存中为对象分配空间
(2)调用初始化方法__init___ 为对象初始化
3.对象创建后,内存中就有了一个对象的实实在在的存在–实例
因此:
(1)创建出来的对象叫做类的实例
(2)创建对象的动作叫做实例化
(3)对象的属性叫做实例属性
(4)对象调用的方法叫做实例方法
在程序执行时:
1.对象各自拥有自己的实例属性
2.调用对象的方法,可以通过self
访问自己的属性
调用自己的方法
结论:
1.每一个对象都有自己独立的内存空间,保存各自不同的属性
2.多个对象的方法,在内存中之有一份,在调用方法时,需要把对象的引用传递到方法内部
Python类中调用内部方法的两种方式
class std():
def un1(self):
print("sssd")
def un2(self):
std.un1(self) #①
t = std()
t.un2()
输出结果:sssd
在①处,我们调用的是非绑定类方法,但是我们是通过类访问的,非绑定类方法只有在对象实例传入时才会将self替换,而类并不会所以我们需要在调用时传入参数self(self在实例化类之后,就相当于对象实例了t了),所以un1有了参数,可以执行
class std():
def un1(self):
print("sssd")
def un2(self):
self.un1()
t = std()
t.un2()
输出结果:sssd
这里就很好理解了,因为调用方法时会自动将对象作为参数传给方法(注意,无论目标方法是非绑定类方法还是绑定类方法都会传),所以当t传入un2时,替换掉了self,代码就可以理解为t.un1()了,就是一个un1的方法调用,这里将t作为参数传给了un1,有了参数,可以执行
python实现类之间的方法互相调用
all.py
from son import *
class ALL():
def __init__(self):
self.mSon = SON(self)
def getAll(self):
print "=================getall---------------"
return self.mSon.getSon()
def getAlltest(self):
print "=================getAlltest---------------"
Instance = ALL()
Instance.getAll()
son.py
class SON():
def __init__(self, instance):
self.mBattle = instance
def getSon(self):
return self.mBattle.getAlltest()
son.py和all.py在同一个文件夹下面,可以通过from son import *或者 import son 来互相调用。
可以动态实例化son.py里面的SON类,而且也可以把ALL的实例通过参数传递给SON,从而调用ALL类的方法。
python:类内变量
-
类变量
-
成员变量
-
成员函数
-
局部变量
class A:
v1 = 100 # 类变量
def __init__(self):
self.v2 = 200 # 成员变量
v3 = 300 # 局部变量
类变量可以由类名统一修改:
A.v1 = 300
# 则每一个A实例里v1都变成300
成员变量只能由实例自己改变:
A.v2 # 这个是错的。
a = A()
a.v2 # 这个是可以访问的。
局部变量只在函数内部生效
Python类变量和实例变量区别
类变量:可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的)。
实例变量:实例化之后,每个实例单独拥有的变量。
class student():
age = 0
name = 'stu'
# age,name是类变量
def __init__(self,age,name):
self.age = age
self.name = name
# 访问实例变量(用self.age self.name)
student1 = student(18,‘hello’)
print(student1.name)
# 打印实例变量,输出hello
print(student.name)
# 打印类变量,输出stu

Python类的变量(类变量和实例对象变量)以某种方式在某地方被赋值,即存在,可被读写
- Python类变量被赋值
(1)类的设计里,
class里def外,通过变量名能被赋值
def里通过类对象即类名字的点运算变量名可被赋值
(2)程序里
通过类对象(类名字)的点运算类名字也可被赋值 - Python实例对象变量被赋值
(1)类的设计时
def里通过self点运算变量名能被赋值,不一定非在init里,其他已被调用的方法函数里也行
(2)程序里
通过实例对象的点运算变量名可被赋值
类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)