zoukankan      html  css  js  c++  java
  • Python--__init__方法

    一、说明

    __init__方法用来为对象定制自己独有的特征

    二、示例代码如下

     1 class LuffyStudent():
     2     school = 'luffycity'
     3 
     4     def __init__(self, name, sex, age):
     5         self.Name = name
     6         self.Sex = sex
     7         self.Age = age
     8 
     9     def learn(self):
    10         print('is learning')
    11 
    12     def eat(self):
    13         print('is eating')
    14 
    15     def sleep(self):
    16         print('is sleeping')

    产生对象代码如下:

    1 stu1 = LuffyStudent('王一丫', '', 18)  # 相当于LuffyStudent.__init__(stu1,'王一丫','女',18)

    加上__init__方法后,类示例化的步骤如下:

    1、先产生一个空对象,stu1

    2、LuffyStudent.__init__(stu1,'王一丫','女',18)

    查看stu1的名称空间:

    1 print(stu1.__dict__)

    结果如下:

    {'Name': '王一丫', 'Sex': '女', 'Age': 18}

    这就显示为对象定制了自己独有的特征

    三、查看对象的数据属性,代码如下:

    1 print(stu1.Name)
    2 print(stu1.Sex)
    3 print(stu1.Age)

    结果如下:

    王一丫

    18

    四、更改对象的数据属性,代码如下:

    1 stu1.Name = '李一丫'
    2 print(stu1.Name)

    结果如下:

    李一丫

    五、删除对象的数据属性,代码如下:

    1 del stu1.Name
    2 print(stu1.__dict__)

    结果如下:

    {'Sex': '女', 'Age': 18}

    六、增加对象的数据属性,代码如下:

    1 stu1.class_name = 'python开发'
    2 print(stu1.__dict__)

    结果如下:

    {'Sex': '女', 'Age': 18, 'class_name': 'python开发'}

    七、属性查找

    首先查看产生的每个对象的名称空间,示例代码如下:

     1 class LuffyStudent():
     2     school = 'luffycity'
     3 
     4     def __init__(self, name, sex, age):
     5         self.Name = name
     6         self.Sex = sex
     7         self.Age = age
     8 
     9     def learn(self):
    10         print('is learning')
    11 
    12     def eat(self):
    13         print('is eating')
    14 
    15     def sleep(self):
    16         print('is sleeping')
    17 
    18 stu1 = LuffyStudent('王一丫', '', 18)
    19 stu2 = LuffyStudent('王二丫', '', 28)
    20 stu3 = LuffyStudent('王三丫', '', 38)
    21 
    22 print(stu1.__dict__)
    23 print(stu2.__dict__)
    24 print(stu3.__dict__)

    结果如下:

    {'Name': '王一丫', 'Sex': '女', 'Age': 18}
    {'Name': '王二丫', 'Sex': '男', 'Age': 28}
    {'Name': '王三丫', 'Sex': '男', 'Age': 38}

    类中的数据属性: 是所有对象共有的

    示例代码如下:

    1 print(LuffyStudent.school)
    2 print(stu1.school)
    3 print(stu2.school)
    4 print(stu3.school)

    结果如下:

    luffycity
    luffycity
    luffycity
    luffycity

    都能够访问类中的数据属性,school

    1 print(LuffyStudent.school, id(LuffyStudent.school))
    2 print(stu1.school, id(stu1.school))
    3 print(stu2.school, id(stu2.school))
    4 print(stu3.school, id(stu3.school))

    结果:

    luffycity 3016506040048
    luffycity 3016506040048
    luffycity 3016506040048
    luffycity 3016506040048

    从以上结果可以看出,访问的是同一块内存地址

    八、类中的函数属性:是绑定给对象,绑定到不同的对象是使用不同的绑定方法

    从以下代码和结果可以看出,代码如下:

    1 print(LuffyStudent.learn)
    2 print(stu1.learn)
    3 print(stu2.learn)
    4 print(stu3.learn)

    结果如下:

    <function LuffyStudent.learn at 0x000001764D5DB730>
    <bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001764D5DE160>>
    <bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001764D5DE1D0>>
    <bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001764D5DE208>>

    1     def learn(self):
    2         print('%s is learning' % self.Name)
    3 
    4 LuffyStudent.learn(stu1)
    5 LuffyStudent.learn(stu2)
    6 LuffyStudent.learn(stu3)

    以上代码输出结果为:

    王一丫 is learning
    王二丫 is learning
    王三丫 is learning

    会自动把对象自身传入

    稍作更改代码后如下所示:

    1     def learn(self, x):
    2         print('%s is learning %s' % (self.Name, x))
    3 
    4 stu1.learn(1)
    5 stu2.learn(2)
    6 stu3.learn(3)

    结果如下:

    王一丫 is learning 1
    王二丫 is learning 2
    王三丫 is learning 3

    属性查找范围,会先从从类中查找,然后又从父类中查找,依次往上查找,但不会从全局变量中查找,代码验证如下:

    1 LuffyStudent.x = 'from Luffycity class'
    2 print(stu1.__dict__)
    3 print(stu1.x)

    验证结果:

    {'Name': '王一丫', 'Sex': '女', 'Age': 18}
    from Luffycity class

    把1 LuffyStudent.x = 'from Luffycity class' 这行代码注释后,

    再执行就会报错,AttributeError: 'LuffyStudent' object has no attribute 'x'

  • 相关阅读:
    Java IO6:字符流进阶及BufferedWriter、BufferedReader
    Java IO5:字符流
    Java IO4:字符编码
    Java IO3:字节流
    Java IO2:RandomAccessFile
    Java IO1:IO和File
    Java异常
    Java语法糖4:内部类
    SharePoint JavaScript API 根据文件路径删除文件
    SharePoint PowerShell 批量删除遗弃视图
  • 原文地址:https://www.cnblogs.com/xudachen/p/8570825.html
Copyright © 2011-2022 走看看