文章目录

  • 关于```_init_```的应用
  • 关于类属性和实例属性的应用
  • 类的实践(制作一个填充用户假数据的工具)

关于_init_的应用

class CocaCola:formula = ['caffeine','sugar','water','soda']def __init__(self):for element in self.formula:print('Coke has {}!'.format(element))def drink(self):print('Energy!')coke = CocaCola()'''
#执行结果为:
Coke has caffeine!
Coke has sugar!
Coke has water!
Coke has soda!
'''

注:
_init_是初始化函数,意味着在执行类的时候,即便不去引用该函数,函数也会被自动执行

给CocaCola定义中文名词属性

#方法一
class CocaCola():formula = ['caffeine','sugar','water','soda']def __init__(self):self.local_logo = '可口可乐'def drink(self): # HERE!print('Energy!')coke = CocaCola()
print(coke.local_logo)'''
#执行结果为:
可口可乐
'''#方法二
class CocaCola:formula = ['caffeine','sugar','water','soda']def __init__(self,logo_name):self.local_logo = logo_namedef drink(self):print('Energy!')coke = CocaCola('可口可乐')
print(coke.local_logo)

关于类属性和实例属性的应用

类属性被重新赋值,引用类属性

class TestA:attr = 1obj_a = TestA()
TestA.attr = 42
print(obj_a.attr)'''
执行结果
42
'''

实例属性重新赋值,引用类属性

class TestA:attr = 1obj_a = TestA()
obj_b = TestA()
obj_a.attr = 42
print(obj_a.attr)
print(obj_b.attr)'''
执行结果
42
1
'''

类属性实例属性具有相同名称,引用属性

class TestA:attr = 1def __init__(self):self.attr = 42obj_c = TestA()
print(obj_c.attr)'''
执行结果
42
'''

注:
类属性被重新赋值,引用类属性:类属性变,实例属性变
实例属性重新赋值,引用类属性:类属性不变,实例属性变
类属性实例属性具有相同名称,引用属性:类属性不变,实例属性变

类的实践(制作一个填充用户假数据的工具)

  • 设计思路
    父类:FakeUser
    功能:
      1.随机姓名
        a.单字名
        b.双字名
        c.无所谓是什么反正有个名字就好了
      2.随机性别
    子类:SnsUser
    功能:
      1.随机数量的跟随者
        a. few
        b. a lot

  • 加载随机姓名的词库
    随机姓名:词库来源于某输入法的姓名词库解析后的结果,分为常见姓氏、常见名(常见名取排名前5000)

ln_path = 'E:/Test/last_name.txt'
fn_path = 'E:/Test/first_name.txt'
fn = []
ln1 = [] #单字名
ln2 = [] #双字名with open(fn_path,'r') as f:for line in f.readlines():fn.append(line.split('\n')[0])print(fn)with open(ln_path,'r') as f:for line in f.readlines():if len(line.split('\n')[0]) == 1:ln1.append(line.split('\n')[0])else:ln2.append(line.split('\n')[0])print(ln1)
print('='*70) #分割线
print(ln2)#将fn=[]、ln1=[]、ln2=[]修改成元组类型
  • 定义父类
import random
class FakeUser:def fake_name(self,one_word=False,two_words=False):if one_word:full_name = random.choice(fn) + random.choice(ln1)elif two_words:full_name = random.choice(fn) + random.choice(ln2)else:full_name = random.choice(fn) + random.choice(ln1 + ln2)print(full_name)def fake_gender(self):gender = random.choice(['男','女','未知'])print(gender)
  • 定义子类
class SnsUser(FakeUser):def get_followers(self,few=True,a_lot=False):if few:followers = random.randrange(1,50)elif a_lot:followers = random.randrange(200,10000)print(followers)user_a = FakeUser()
user_b = SnsUser()
user_a.fake_name()
user_b.get_followers(few=True)
  • 改进父类、子类的定义方式

class FakeUser():def fake_name(self,amount=1,one_word=False,two_words=False):n = 0while n <= amount:if one_word:full_name = random.choice(fn) + random.choice(ln1)elif two_words:full_name = random.choice(fn) + random.choice(ln2)else:full_name = random.choice(fn) + random.choice(ln1 + ln2)yield full_namen+=1def fake_gender(self,amount=1):n = 0while n <= amount:gender = random.choice(['男','女','未知'])yield gendern +=1class SnsUser(FakeUser):def get_followers(self,amount=1,few=True,a_lot=False):n = 0while n <= amount :if few:followers = random.randrange(1,50)elif a_lot:followers = random.randrange(200,10000)yield followersn+=1user_a = FakeUser()
user_b = SnsUser()
for name in user_a.fake_names(30):print(name)
for gender in user_a.fake_gender(30):print(gender)

提示:本文是《编程小白的第一本python入门书》读后总结

python关于类、self、_init_的应用相关推荐

  1. 如何创建你的第一个Python元类?

    Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一.通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类.本文介绍 ...

  2. Python:类与结构体

    Python的类提供了面向对象编程的所有标准特性:类继承机制允许有多个基类,一个派生类可以覆盖基类中的任何方法,一个方法可以使用相同的名字调用基类中的方法. 1. Python的域(scopes)和名 ...

  3. Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

    Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...

  4. 关于python创建类的深入理解

    背景 我们知道在python中一切皆为对象的概念,那我们们来看一段程序 class Foo(object):def __init__(self, name):self.name = namef = F ...

  5. python定义类()中写object和不写的区别

    python定义类()中写object和不写的区别 这里需要说明一下: python3中,类定义默认继承object,所以写不写没有区别 但在python2中,并不是这样 所以此内容是针对python ...

  6. python 元类工厂模式_Python进阶丨如何创建你的第一个Python元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...

  7. Python进阶-----类的继承顺序

    python的类可以继承多个类,如果继承多个类,那么其寻找方法的方式有:深度优先和广度优先 基类或者父类继承了object类,那么该类就是新式类,否则便是经典类 当类是经典类时,多继承情况下,会按照深 ...

  8. Python虚拟机类机制之descriptor(三)

    从slot到descriptor 在Python虚拟机类机制之填充tp_dict(二)这一章的末尾,我们介绍了slot,slot包含了很多关于一个操作的信息,但是很可惜,在tp_dict中,与__ge ...

  9. Python -- dict 类

    Python dict类常用方法: class dict(object): def clear(self):  #清除字典中所有元素形成空字典,del是删除整个字典: >>> tes ...

  10. Python动态类和动态方法的创建和调用

    借助于python的动态语言特性,很容易对对象进行添加方法或者属性,这也是python的灵活之一. 动态生成类的属性及其方法 在某些情况可能要根据不同的参数来动态生成不同的实例方法.静态方法.类方法. ...

最新文章

  1. Corosync Pacemaker 高可用 Mariadb
  2. curd boy 入门
  3. linux火狐打不开网页视频下载,win10下火狐浏览器无法打开网页视频的解决方法...
  4. 快速排序 数组 函数 c语言,书上快速排序程序中子函数是怎样更改数组的?理论上不可实现啊...
  5. 魅蓝android底层是什么,魅蓝E2的手机系统是什么
  6. android 获取系统时间的时间戳 ,时间戳日期互转,计算日期时间差,获取明天日期,比较时间大小
  7. spring5.0学习笔记1
  8. 数据库学习笔记3-隔离级别 Read Uncommitted
  9. uniapp引入阿里巴巴矢量图标库
  10. GooFlow获取节点/线信息和自定义节点属性
  11. 非线性鲁棒控制器_Sliding Mode_滑模控制
  12. Android Studio在运行时显示Please Select Android SDK的解决方法
  13. 全球及中国石墨烯行业发展前景规模及需求容量预测报告2021年版
  14. 基于STM32的DDS信号发生器
  15. 河北单招2021计算机类,2021河北省单招十大类专业
  16. kafka第二次课!!!
  17. video.js播放rtmp视频
  18. MCNP 学习笔记之空气比释动能(F4 F5 计数卡)
  19. 需求调研计划_三个公式,让你的2021年度培训计划更出彩
  20. vivado对mcs文件固化

热门文章

  1. Visual Studio工具箱显示自定义控件
  2. 教你如何解决SQL server中提示对象名无效
  3. Sql Server——Sql Server中进行查询操作时提示“对象名无效”
  4. java浪漫之心代码_浪漫桃心的Android表白程序
  5. 网络协议栈分析——从设备驱动到链路层
  6. HDOJ 4622 Reincarnation (hash)
  7. 我用二手书,在这里换了一大箱好书
  8. 计算机字长 按字编址,按字节编址与按字长编址区别及原理图解分析
  9. Python实用工具,pyqt5模块,Python实现自动生成艺术签名的小工具
  10. 计算机科学与技术专业前沿技术相关论文,计算机科学与技术专业创新能力的培养途径论文...