一、class
-
class用来定义一个类(一个共同点的模型):
-
属性:
- 函数:方法,人们喜欢把类中的函数叫方法
- 变量:字符串,列表,元组,字典,集合
-
类:一个属性集合
-
实例:在内存中通过模型实例化创建的数据
- 实例是一个容器一样,包含了所有类里的属性,而且是实际存在于内存中的
-
实例化:通过类名括号的方式
class A: pass a = A() # 实例化
-
-
面向对象的语法中,我们可以通过xxx.xxxx来获取到对应的属性
mylist = [1,2,3,4,5] mylist.remove(3) print(mylist) # [1,2,4,5]
例:
class User: # 一个角色的类
# self是一个将我们函数声明为单独的一个实例工作的参数
# 每一个加了self的函数或者变量 都只能为自己的实例来工作
# 在实例调用的时候,当前实例都会覆盖掉self
# self用来指向当前工作实例
# self是约定俗称的
def __init__(self,name,sex,age): # __init__是一个特殊内置函数
self.name = name
self.sex = sex
self.age = age
# 0:女人
# 1:男人
def run(self):
print('%s的年龄是:%d' %(self.name,self.age))
c1 = User('小明',1,25)
#c1.__init__(c1,'小明',1,25)
c2 = User('小红',0,28)
#c2.__init__(c2,'小红',0,28)
c3 = User('小兰',1,18)
#c3.__init__(c3,'小兰',1,18)
print(c1.name) # 小明
print(c2.name) # 小红
print(c3.name) # 小兰
c1.run() # 小明的年龄是:25
c2.run() # 小红的年龄是:28
c3.run() # 小兰的年龄是:18
-
Python中处处皆对象
二、 init
init函数为每一个实例进行数据的初始化工作
初始化函数 就是为了给实例创建属于自己的变量
init函数在实例化过程中自动调用,不需要你手动的来调用
init函数不允许有返回值,一旦有返回值,那么就报错啦
TypeError: init() should return None, not 'int'
类型错误:改函数必须返回一个None,而不是int
三、self
- self是一个将我们函数声明为单独的一个实例工作的参数
- 每一个加了self的函数或者变量 都只能为自己的实例来工作
- 在实例调用的时候,当前实例都会覆盖掉self
- self用来指向当前工作实例。self是约定俗称的命名,你也可以叫别的,但是一般都叫self
四、面向对象属性探究
cls用来指向类,self用来指向实例
- 类的普通函数
# 类的普通函数只能被类所使用
# 不能访问类变量及实例变量
class A:
place = '地球'
def __init__(self):
self.name = '人'
# 类的普通函数
def func(): # 函数没有任何参数
print('哈哈哈哈')
print(place) #普通函数不能访问类变量
print(name) #普通函数不能访问实例变量
a = A() # func
a.func() #实例调用函数!实例在调用函数的时候,首先会把自己作为第一个参数传递
# TypeError: func() takes 0 positional arguments but 1 was given
A.func() #哈哈哈哈
- 类的高级函数
# 类的高级函数
实例和类均可访问
可以访问类的变量
不可以访问实例的属性
class A:
place = '地球'
def __init__(self):
self.name = '人'
# 实例的东西只有实例能访问
# 类的高级函数
@classmethod # 默认的必须要有一个参数
# cls参数用来指向当前的类!
def g_func(cls):
print(cls.place)
a = A()
print(a.name) # 实例的东西只有实例能访问
a.g_func()
A.g_func()
- 类的静态函数
# 类的静态方法
# 首先无法访问类的变量,没有指向当前使用类的指针
# 实例和类均可调用
# 不可以访问属于实例的属性
class A:
@staticmethod #类似与类的普通函数
# 不需要cls这样的额外参数
def s_func():
print('绘声绘色')
a = A()
a.s_func()
A.s_func()
** 实例之间可以通过静态方法@staticmethod 以及高级方法@classmethod 进行数据通信
网友评论