关于_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入门书》读后总结