Python学习笔记(八):创建类和对象,以及__init__()方法的用法

1.创建类和对象

1.1.定义类的格式:

class 类名:
    方法列表

1.2.根据类创建一个或多个对象,创建对象的格式如下:

对象名1 = 类名()
对象名2 = 类名()

1.3.示例代码

# 定义一个Person类
class Person:
    # 实例方法
    def speak(self):
        print("我在学Python")

# 实例化对象p1
p1 = Person()
# 给p1对象添加属性,以及对应的属性值
p1.name = "crystal"
#调用对象的实例方法
p1.speak()
print("我的名字叫", p1.name)

# 实例化对象p2
p2 = Person()
# 给p2对象添加属性,以及对应的属性值
p2.name = "allan"
# 调用实例化方法
p2.speak()
print("我的名字叫", p2.name)

2.通过self获取对象的属性

对象创建并添加属性后,怎样在类的实例方法里获取这些属性呢?===》通过self获取对象的属性

可将1.3中的代码修改成如下:

# 定义一个类
class Person:
    # 实例化方法
    # self指向调用speak()方法的对象
    def speak(self):
        print("我在学Python")
        # print("我的名字叫%s,年龄%d" % (self.name, self.age))
        # print("我的名字叫{n},年龄{a}".format(a=self.age, n=self.name))
        print("我的名字叫{},年龄{}".format(self.name, self.age))

# 实例化一个对象
p1 = Person()
# 给p1对象添加属性,以及对应的属性值
p1.name = "crystal"
p1.age = 20
#调用实例化方法,即可获取对象p1的属性
p1.speak()

3.__init__()方法

3.1.__init__()魔法方法

魔法方法:以两个下划线__开始,并以两个下划线结束__的方法,就是魔法方法。

__init__()魔法方法:通常用来做属性初始化和赋值的操作,__init__()魔法方法又叫构造方法。

示例代码如下:

# 定义一个类
class Person(object):
    # __init__()方法用来对变量做初始化和赋值操作,在类实例化对象的时候,会自动被调用
    def __init__(self):
        self.name = "crystal"
        self.age = 20

    # 实例化方法
    def speak(self):
        print("我的名字叫{},年龄{}".format(self.name, self.age))

# 实例化一个对象p,会自动调用__init()__对象
p = Person()
# 调用实例化方法speak(),即可获取对象p的属性
p.speak();

3.2.有参数的__init__()方法

在__init__()方法里定义属性的固定值,则每个实例化对象的属性值都是相同的, 怎么让每个实例化对象都拥有不同的属性值呢?===》可以使用有参数的__init__()方法

示例代码如下:

# 定义一个类
class Person(object):
    # __init__()构造方法,用来对变量做初始化和赋值操作
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 实例化方法
    def speak(self):
        print("我的名字叫{},年龄{}".format(self.name, self.age))

# 实例化一个对象p1
p1 = Person("crystal", 20)
# 调用实例化方法speak(),即可获取对象p1的属性值
p1.speak()

# 实例化一个对象p2
p2 = Person("allan", 29)
# 调用实例化方法speak(),即可获取对象p2的属性值
p2.speak()

3.3.注意

  • __init__(self)中,默认有1个名字为self的参数,如果在创建对象时传递了2个实参,那么__init__(self)中除了self作为第一个形参外还需要2个形参,例如:__init__(self,x,y);
  • 在类内部获取 属性和实例方法,通过self获取;
  • 在类外部获取 属性和实例方法,通过对象名获取;
  • 如果一个类有多个对象,每个对象的属性是各自保存的,都有各自独立的地址;
  • 实例方法是所有对象共享的,只占用一份内存空间,类会通过self来判断是哪个对象调用了实例方法。

猜你喜欢

转载自blog.csdn.net/weixin_44679832/article/details/114183700
今日推荐