Python基础——类1(定义与__init__初始化)

  1. 类的定义
    • 类和对象都是对现实生活中的事物或程序中的内容的抽象
    • 实际上所有的事物都由两部分构成:
      • (1)数据(属性)
      • (2)行为(方法)
    • 在类的代码块中,我们可以定义变量和函数
      • 变量会成为该类实例的公共属性,所有的该类实例都可以通过 对象.属性名 的形式访问
      • 函数会成为该类实例的公共方法,所有该类实例都可以通过 对象.方法名() 的形式调用方法
    • 注意:
      • 方法调用时,第一个参数由解析器自动传递,所以定义方法时,至少要定义一个形参!
# 定义一个表示“七龙珠”的类
class Dragon_Ball :
    # 在类的代码块中,我们可以定义变量和函数
    # 在类中我们所定义的变量,将会成为所有的实例的公共属性
    # 所有实例都可以访问这些变量
    
    name = "龙珠"  # 公共属性,所有实例都可以访问
    
    # 在类中也可以定义函数,类中的定义的函数,我们称为方法
    # 这些方法可以通过该类的所有实例来访问
    
    def say_hello(self):
        # 方法每次被调用时,解析器都会自动传递第一个实参
        # 第一个参数,就是调用方法的对象本身,
        #   如果是p1调的,则第一个参数就是p1对象
        #   如果是p2调的,则第一个参数就是p2对象
        # 一般我们都会将这个参数命名为self

        # say_hello()这个方法,可以显示如下格式的数据:
        #   你好!我是 xxx
        #   在方法中不能直接访问类中的属性
        print('你好!我是 %s' %self.name)
# 创建Dragon_Ball的实例
p1 = Dragon_Ball()
p2 = Dragon_Ball()
#调用属性,对象.属性
print(p1.name)
print(p2.name)

在这里插入图片描述

# 修改name属性
p1.name = '孙悟空'
p2.name = '贝吉塔'
print(p1.name)
print(p2.name)

在这里插入图片描述

# 调用方法,对象.方法名()
# 方法调用和函数调用的区别
# 如果是函数调用,则调用时传几个参数,就会有几个实参
# 但是如果是方法调用,默认传递一个参数,所以方法中至少要定义一个形参

p1.say_hello() # '你好!我是 孙悟空'
p2.say_hello() # '你好!我是 贝吉塔'

在这里插入图片描述

del p2.name # 删除p2的name属性
print(p1.name) 
print(p2.name) 

在这里插入图片描述

  • 实例为什么能访问到类中的属性和方法
    • 类中定义的属性和方法都是公共的,任何该类实例都可以访问
  • 属性和方法查找的流程
    • 当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性,如果有,则直接返回当前的对象的属性值,如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值,如果类对象中依然没有,则报错!
  • 类对象和实例对象中都可以保存属性(方法)
    • 如果这个属性(方法)是所有的实例共享的,则应该将其保存到类对象中
    • 如果这个属性(方法)是某个实例独有,则应该保存到实例对象中
  • 一般情况下,属性保存到实例对象中,而方法需要保存到类对象中
  1. 对象的初始化
    • 创建对象的流程
      • p1 = Person()的运行流程
        (1) 创建一个变量
        (2)在内存中创建一个新对象
        (3)init(self)方法执行
        (4)将对象的id赋值给变量
class Dragon_Ball :
    # 在类中可以定义一些特殊方法(魔术方法)
    # 特殊方法都是以__开头,__结尾的方法
    # 特殊方法不需要我们自己调用,不要尝试去调用特殊方法
    # 特殊方法将会在特殊的时刻自动调用

    # init会在对象创建以后立刻执行
    # init可以用来向新创建的对象中初始化属性
    # 调用类创建对象时,类后边的所有参数都会依次传递到init()中
    def __init__(self,name):
        # print(self)
        # 通过self向新建的对象中初始化属性
        self.name = name

    def say_hello(self):
        print('大家好,我是%s'%self.name)

p1 = Dragon_Ball('孙悟空')
p2 = Dragon_Ball('贝吉塔')
p3 = Dragon_Ball('弗利萨')
p4 = Dragon_Ball('魔人布欧')

print(p1.name)
print(p2.name)
print(p3.name)
print(p4.name)

在这里插入图片描述

  • 类的基本结构
class 类名([父类]) :

    公共的属性... 

    # 对象的初始化方法
    def __init__(self,...):
        ...

    # 其他的方法    
    def method_1(self,...):
        ...

    def method_2(self,...):
        ...

    ...  
  1. 类应用实例
class Dragon_Ball :
    '''
        表示龙珠角色的类
    '''
    def __init__(self, name, age, gender, height):
        self.name = name
        self.age = age
        self.gender = gender
        self.height = height
    
    def skill(self):
        '''
            龙珠角色的技能
        '''
        print("龟派气功")
    
    def run(self):
        print("%s 快乐的奔跑着~~"%self.name)

d = Dragon_Ball('孙悟空',8,'M',30)
print(d.name , d.age , d.gender , d.height)    

在这里插入图片描述

  • 17
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python面向对象中,__str__方法是一个特殊方法,用于定义一个的实例在被打印时的字符串表示形式。通过在定义__str__方法,我们可以自定义实例的打印输出结果。引用和给出了两个例子,分别是Human和Cat的实例在被打印时的表现形式。 在引用中,Human的__str__方法返回一个描述实例的字符串,包含了实例的姓名和头发颜色。当打印一个Human的实例Xiaolang时,会直接打印__str__方法的返回值,也就是描述实例的字符串。结果会显示为"我是小浪宝宝,我有黑色的头发"。 同样地,在引用中,Cat的__str__方法返回一个包含实例姓名和年龄的字符串。当打印一个Cat的实例tom时,也会直接打印__str__方法的返回值,结果会显示为"tom,18"。 需要注意的是,__str__方法必须返回一个字符串,否则将导致错误。在引用中,Cat的__str__方法中没有使用return语句,而是使用了print语句。这将导致__str__方法没有返回值,因此打印实例时会出错。 综上所述,__str__方法是用于定义实例在被打印时的字符串表示形式的特殊方法,在中重写该方法可以自定义实例的打印输出结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python——(__init__初始化 、__str__ 方法的使用及面向对象和向过程的区别)](https://blog.csdn.net/m0_52162042/article/details/121068245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python魔法方法之 __str__](https://blog.csdn.net/m0_46811353/article/details/128357038)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值