Python 类/对象
Python 是一种面向对象的编程语言。
Python 中的几乎所有东西都是对象,拥有属性和方法。
类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”。
创建类
关键字:class
下面通过创建名字为Dog的类举例:
class Dog:
name='汤圆'
dog_1=Dog()
print(dog_1.name) #汤圆
dog_1.name='饺子'
print(dog_1.name) #饺子
这里面,Dog为类名称,name为类变量。
__init__() 函数
上面的例子是最简单形式的类和对象,在实际应用程序中并不真正有用。
要理解类的含义,我们必须先了解内置的 __init__()
函数。
所有类都有一个名为 __init__() 的函数,它始终在启动类时执行。
使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作:
class Dog:
def __init__(self,name,age):
self.name= name
self.age= age
def greet(self):
print("hi,my name is "+self.name)
dog_1=Dog('汤圆',1)
print(dog_1.name) #汤圆
dog_1.greet() #hi,my name is 汤圆
init本身含义是初始化,即将名为Dog的类初始化数据,并且在后面创建变量的时候将分别填充属性数据,把其作为__init__(self,name,age)的实参。比如该例子中,狗都有名字和年龄,在创建每个狗的实例时,都应该创建各自的名称和年龄作为实参,因此录入该狗狗的时候就应该把其填入:
dog_1=Dog('汤圆',1)
class Dog:
def __init__(self,name,age):
self.name= '小狗'
def greet(self):
print("hi,my name is "+self.name)
dog_1=Dog('汤圆',1)
print(dog_1.name) #小狗
dog_1.greet() #hi,my name is 小狗
若将name 和age 改成其他,我们发现无论后面怎么改,名字始终不改变。
原因是在构造函数中,我为 self.name
赋了一个固定的值 '小狗'
,而不是使用通过参数传递进来的 name
值。这导致了无论我创建 Dog
类的实例时传入什么名字,实例的 name
属性总是被设置为 '小狗'
。
self 参数
self
参数是对类的当前实例的引用,用于访问属于该类的变量。
它不必被命名为 self
,可以随意调用它,但它必须是类中任意函数的首个参数,例子如上。
但我们可以简单理解一下这个参数,self和对象指向同一个内存地址,self就是对象的引用,
即哪个变量调用,就用该变量给的值,其实例子在第一个实例中已经体现:
class Dog:
name='汤圆'
dog_1=Dog()
print(dog_1.name) #汤圆
dog_1.name='饺子'
print(dog_1.name) #饺子
在这里面,我们可以看到。dog_1是那个变量,通过dog_1改变小狗名称,后来通过输出函数发现更改成功。