一。self用法
在Python为面向对象编程中,成员函数被调用时,无论函数有没有参数,都会有一个参数传给它,这个参数就是类本身,所以我们在定义成员函数时不管有没有参数传递,都要写上一个参数,这个参数代表类本身,通过这个参数我们可以引用类的成员变量和成员函数。
这个参数通常我们命名为self,当然你也可以写为其它的名字,但是为代码的标准和可读性,不建议这样操作。
class Staff: # Staff为员工的意思
bonus = 30000 # bonus为津贴、奖金的意思
def salary(self): # salary为工资的意思
salary = 10000+self.bonus
return salary
zhang_san = Staff()
zhang_san_salray = zhang_san.salary()
# self代表类的实例,而非类
class TestDemo():
# 可将self理解为实例td
def testFn(self):
print(f"谁调用我,我就是谁,此时调用我的是{self}")
# 实例调用\_\_class\_\_属性时会指向该实例对应的类
print(f"我是按照{self.\_\_class\_\_}创建出来的")
# td为TestDemo的实例
td = TestDemo()
# 在类中方法的形参中,self参数一定要定义,但是在调用时会自动传入。
td.testFn()
谁调用我,我就是谁,此时调用我的是<\_\_main\_\_.TestDemo object at 0x00000000028836C8>
我是按照<class '\_\_main\_\_.TestDemo'>创建出来的
说明:
<__main__.TestDemo object at 0x00000000028836C8>表示:
self是一个TestDemo类型的object(对象),对象在内存的地址为0x00000000028836C8。
二。init的函数的用法
在创建类时, 可手动添加一个 __init__()方法,称为构造方法,这是一个实例方法
构造方法用于创建实例对象时使用,每当创建一个类的实例对象时,Python 解释器都会自动调用
一般用来初始化对象的某些属性
class 类:
def __init__(self, 参数):
self.属性 = 参数 ...
对象 = 类(参数)
init 的前缀和后缀是两个下划线 _
方法可以包含多个参数,但必须要包含一个 self 参数,且必须为第一个参数,所以至少要包含一个 self 参数
第一个参数 self 指向新创建的对象
# 带参数
class PoloBlog:
def __init__(self, name, age):
print("自动调用构造方法")
# 初始化实例属性
self.name = name
self.age = age
# 下面定义了一个 say 实例方法
def say(self):
print(self.name, self.age)
blog = PoloBlog("姓名", "年龄")
blog.say()
三。成员函数的调用方法
class Student:
#成员变量
def __init__(self):
self.name=None
self.gender=None
#成员方法: self 仅在声明时占位, 无需传递具体参数
def play(self):
print(self.name+'的性别 '+self.gender+",她正在玩游戏!")
def study(self):
print(self.name+'的性别 '+self.gender+",她正在学习!")
# #创建对象
stu =Student()
#赋值
stu.name='mike'
stu.gender='Woman'
#调用方法
stu.play()
stu.study()
class Student:
#成员变量
def __init__(self):
self.name=None
self.gender=None
#成员方法带参数: self 仅在声明时占位, 无需传递具体参数
def play(self,thing):
print(f'{self.name}的性别-{self.gender},她正在玩{thing}')
def study(self,thing='java'): # 默认形参
print(f'{self.name}的性别-{self.gender},她正在学习{thing}')
#创建对象
stu =Student()
#赋值
stu.name='samantha'
stu.gender='Woman'
#调用方法
stu.play('CS')
stu.study()