python 类命名空间_day23 01 类的命名空间

day23  01 类的命名空间

一、初识面向对象复习

定义类:

class

函数:方法 动态属性

变量:类属性 静态属性

过程:

(1)_init_方法:初始化:def _init_(self,参数)

python帮我们创建了一个对象self

每当我们调用类的时候就会自动触发这个方法

在_init_方法里面可以对self进行赋值

self是什么:self拥有属性都属于对象

在类的内部,self就是一个对象

比如:someone=person(),someone.walk==person.walk(someone),括号里面就是类里面的walk方法所传的参数self,

而且这个参数必须传

(2)实例化:对象=类(参数是_init_方法的)

实例==对象 没有区别

对象查看属性:对象.属性

对象调用方法:对象.方法名(参数)==类名.方法名(对象名,参数)

(3)实例:

求正方形的周长和面积:

class square:

def __init__(self,side_len):

self.side_len_=side_len

def perimeter(self):

return self.side_len_*4

def area(self):

return self.side_len_**2

s=square(6)

print(s.perimeter())

print(s.area())

运行结果:

24

36

为什么计算这个周长和面积要使用类的调用和方法呢?

正方形不同的地方就是边长不一样,不同的边长的正方形就归为一类

有了固定的边长,当调用类里面的方法的时候就不需要再传参数了:print(s.perimeter()) , print(s.area())都不需要再传参数

何为python入门,面向对象入门:

python 入门:当你见到一个需求,你能翻译成python语言

面向对象入门:当你见到一个需求,你能分析这个需求适不适合使用面向对象解决,如果适合,你能有一些想法

二、类和对象的命名空间

类里面可以定义两种属性:

静态属性:

动态属性:

定义一个类:一种课程course,属性有:老师,课程名字,课程时间,课程费用

class course:

language='chinese'

def __init__(self,teacher,course_name,period,price):

self.teacher=teacher

self.course_name=course_name

self.period=period

self.price=price

def func(self):

pass

python=course('李白','python','六个月','10000')

print(python.teacher)

print(python.course_name)

print(python.period)

print(python.price)

course.language='english' #直接类名.静态属性是可以修改静态属性的

print(course.language)

course.__dict__['language']='english' #但是使用类的字典形式去修改静态属性是不可能的,会报错

print(course.language)

print(python.language) #使用对象调用和查看类下的静态属性是可以的

运行结果:

traceback (most recent call last):

李白

file "", line 31, in

python

typeerror: 'mappingproxy' object does not support item assignment

六个月

10000

chinese

english

为什么对象可以直接调用查看类下的静态属性呢?

print(python.language)---可以且不会报错

类下的命名空间有:language, _init_, func

对象self里面的命名空间有:teacher, course_name, period, price

类对象指针(内存地址可以有对象的指向类的):可以根据对象属性找到对应的类,但是不能根据类找到对应的对象属性

python.language:首先会在python里面找,如果找不到就会向对应的类中找,找到了就可以调用查看了

course.name:是找不到的

假设多加一门课程linux:

python=course('李白','python','六个月','10000')

linux=course('秋白','linux','六个月','10000')

没有改变类下的静态属性language,然后打印

print(python.language)

print(linux.language)

是都可以打印出来的,且都是chinese,而当通过

course.language='english'

修改静态属性之后,再次打印

print(python.language)

print(linux.language)

结果也都会随之改变,都会变成english,当只通过对象修改类下的静态属性,在打印也是可以改的,如下:

python.language='english'

print(python.language)

但是这样的改法实际上是在python对象下创建了一个新的language=‘english’,所以再python里面可以找得到,就不会继续往类下面去找,

但是在类下和linux下面(linux指向的是类的命名空间)并没有创建新的language,所以当打印

print(linux.language)

print(course.language)

的结果还是原来的language的结果,即chinese所以:

注意:对于不可变的数据类型来说,类变量最后使用类操作

希望与广大网友互动??

点此进行留言吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值