编程小白的第一本 python 入门书 学习笔记06 第七章 类与可口可乐



定义一个可口可乐类,类中有一个列表变量。类的变量又称为类的属性。

class CocaCola:

formula = ['caffeine','sugar','water','soda']

 

类的实例化和属性的使用

coke_for_me= CocaCola()

coke_for_you= CocaCola()

 

print(CocaCola.formula)

print(coke_for_me.formula)

print(coke_for_you.formula)

 

>>> ['caffeine','sugar','water','soda']

>>> ['caffeine','sugar','water','soda']

>>> ['caffeine','sugar','water','soda']

 

for element in coke_for_me.formula:

print(element)

 

>>> caffeine

>>> sugar

>>> water

>>> soda

 

创建实例属性(对象属性),及通过实例对象创建和使用类中不存在的属性。

class CocaCola:

formula =['caffeine','sugar','water','soda']'

 

coke_for_China= CocaCola()

coke_for_China.local_logo = '可口可乐 '

print(coke_for_China.local_logo)

 

使用实例方法

class CocaCola:

formula = ['caffeine','sugar','water','soda']

def drink(self):

print('Energy!')

 

coke= CocaCola()

coke.drink()

 

>>> Energy!

 

self的解释

coke= CocaCola

coke.drink() == CocaCola.drink(coke)

被实例化的对象会被编译器默默地传入后面方法的括号中,作为第一个参数。self这个参数名称是可以随意修改名称的,但是按照Python的规定,我们统一使用self

 

我们还可以加入自己的参数

class CocaCola:

formula = ['caffeine','sugar','water','soda']

def drink(self,how_much):

if how_much== 'asip':

print('Cool~')

elif how_much== 'wholebottle'

print('Headache!')

 

ice_coke= CocaCola()

ice_coke.drink('asip')

 

>>> Cool~

 

魔术方法(如初始化方法 _init_(),创建实例的时候,自动执行的方法

class CocaCola:

formula = ['caffeine','sugar','water','soda']

def __init__(self,logo_name):

self.local_logo = logo_name

def drink(self):

print('Energy!')

 

coke = CocaCola('可口可乐')

coke.local_logo

>>> 可口可乐

 

类的继承

父类

class CocaCola:

calories = 140

sodium = 45

total_carb = 39

caffeine = 34

 

ingredients = [

'High Fructose Corn Syrup',

'Carbonated Water',

'Phosphoric Acid',

'Natural Flavors',

'Caramel Color',

'Caffeine'

]

 

def __init__(self,logo_name):

self.local_logo = logo_name

 

def drink(self):

print('You got {} cal energy!'.format(self.calories))

子类

class CaffeineFree(CocaCola):

caffeine = 0

 

ingredients = [

'High Fructose Corn Syrup',

'Carbonated Water',

'Phosphoric Acid',

'Natural Flavors',

'Caramel Color',

]

 

coke_a= CaffeineFree('Cocacola-FREE')

coke_a.drink()

 

一些需要注意的地方

  1. 类属性如果被重新赋值,是否会影响到类属性的引用?

只有实例属性是实例自己的,其他属性来自类。

classTestA:

attr=1

 

obj_a=TestA()

obj_a.test='test'

 

TestA.attr=42

print(obj_a.attr)

 

print(TestA.__dict__)

print(obj_a.__dict__)

 

>>>42

>>>{'__module__':'第八章.开始使用第三方类库','attr': 42, '__dict__': <attribute '__dict__' of 'TestA' objects>,'__weakref__': <attribute '__weakref__' of 'TestA' objects>, '__doc__':None}

>>>{'test': 'test'}

 

  1. 实例属性如果被重新赋值,是否会影响到类属性的引用?

如果改变实例属性的值,那么实例属性的值就来自自身。

classTestA:

attr=1

 

obj_a=TestA()

obj_b=TestA()

 

obj_a.attr=42

print(obj_b.attr)

print(TestA.__dict__)

print(obj_a.__dict__)

 

>>>1

>>>{'__module__':'第八章.开始使用第三方类库','attr': 1, '__dict__': <attribute '__dict__' of 'TestA' objects>,'__weakref__': <attribute '__weakref__' of 'TestA' objects>, '__doc__':None}

>>>{'attr': 42}

 

  1. 类属性实例属性具有相同的名称,那么.后面引用的将会是什么?

按照代码执行顺序,最后引用的会是实例属性。

classTestA:

attr=1

def__init__(self):

self.attr=42

 

obj_a=TestA()

print(TestA.attr)

print(obj_a.attr)

 

>>>1

>>>42

 

类的扩展

obj1=1

obj2='String!'

obj3=[]

obj4={}

print(type(obj1),type(obj2),type(obj3),type(obj4))

 

>>><class 'int'> <class 'str'> <class 'list'><class 'dict'>

 

安装自己的库

一般需要提交到pip上,简易方法是把python文件放到 site-packages文件夹。

import sys

print(sys.path)

print(sys.path[3])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值