python关于类、self、_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_name
    
    def drink(self):
        print('Energy!')

coke = CocaCola('可口可乐')
print(coke.local_logo)

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

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

class TestA:
	attr = 1

obj_a = TestA()
TestA.attr = 42
print(obj_a.attr)

'''
执行结果
42
'''

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

class TestA:
    attr = 1

obj_a = TestA()
obj_b = TestA()
obj_a.attr = 42
print(obj_a.attr)
print(obj_b.attr)

'''
执行结果
42
1
'''

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

class TestA:
    attr = 1
    def __init__(self):
        self.attr = 42

obj_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 = 0
        while 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_name
            n+=1
            
    def fake_gender(self,amount=1):
        n = 0
        while n <= amount:
            gender = random.choice(['男','女','未知'])
            yield gender
            n +=1
            
class SnsUser(FakeUser):
    def get_followers(self,amount=1,few=True,a_lot=False):
        n = 0
        while n <= amount :
            if few:
                followers = random.randrange(1,50)
            elif a_lot:
                followers = random.randrange(200,10000)
            yield followers
            n+=1
            
user_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入门书》读后总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值