收藏此站 联系我们 网站
当前位置:首页» 行业网站案例 » 【建站服务】专业网站建设-网站设计-网站制作与网站开发-高端品牌企业宣传策划-广元上往建站-域名申请

【建站服务】专业网站建设-网站设计-网站制作与网站开发-高端品牌企业宣传策划-广元上往建站-域名申请

作者: 风兰 . 阅读量: 7 . 发表时间:2022-09-21 05:37:06

网站建设

上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


专业网站建设-网站设计-网站制作与网站开发-高端品牌企业宣传策划-广元上往建站

网站建设.png

  1.     def intro(self):
            print(f'My name is {self.name},I'm {self.age}')
    
        def get_var(self):
            print(self.__privater_var)
    
        def set_var(self, var):
            self.__privater_var = varsomeone = People(name='jack', age=20)someone.intro()print(someone.age)someone.get_var() # 通过get_var方法访问私有属性__privater_var,值为10someone.set_var(30) # 通过set_var方法修改私有属性__privater_var,值为30someone.get_var() # 再次通过get_var方法访问私有属性__privater_var,值为30

    结果:

    My name is jack,I'm 20
    20
    10
    30

    接下下来看看为什么我们使用someone.__privater_var会报错呢?

    AttributeError: 'People' object has no attribute '__privater_var'

    这里我们先使用 dir() 函数:

    print(dir(someone)) #  获得当前someone的属性列表

    结果:

    ['_People__privater_var', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'get_var', 'intro', 'name', 'set_var']

    从打印出的结果中,我们并没有找到'_peivater_var'但是我们看到一个'_People__privater_var'.有没有想到什么?原来是被重命名了。好,我们来试试:

    print(someone._People__privater_var)someone._People__privater_var = 40print(someone._People__privater_var)

    结果:

    3040

    所以说,私有变量的属性是可以修改的。既然Python阻止访问,一般情况下就不要访问。

    日日夜夜

       日日夜夜

      dwl***t30@gmail.com

    2年前 (2020-04-23)
  2.    真心

      297***2808@qq.com

    5

    上面给的 people 类定义混淆了类属性与实例属性,下面我给出自己改写的 People 定义予以证明:

    # 类定义class People:    
        name = 'nnnnnn'  #这个是类属性    
        age = 20         #这个也是类属性    
        __weight = 21    #这个也是类属性,且是私有的    
        # 定义构造方法    
        def __init__(self, name, age, weight):        
            self.name = name    #这里改写的是实例属性,与类属性没有关联        
            self.age = age     #这里改写的是实例属性,与类属性没有关联        
            self.__weight = weight  #实例属性, 这里改写的是实例属性,与类属性没有关联        
            #People.__weight = weight    
        def speak(self):        
            print("说: 我叫 {0},{1} 岁,体重{2}斤(实例属性)" .format(self.name, self.age, self.__weight))    
        def speak2(self):        
            print("私有类属性__weight = {0}".format(People.__weight))p1 = People('张三', 10, 60)p1.speak()p1.speak2()print("类属性:name={0}, age={1}".format(People.name, People.age))p2 = People('李四', 12, 69)p2.speak()p2.speak2()print("类属性:name={0}, age={1}".format(People.name, People.age))

    运行结果:

    说: 我叫 张三,10 岁,体重60斤(实例属性)私有类属性__weight = 21类属性:name=nnnnnn,

Python3 命名空间和作用域

命名空间

先看看官方文档的一段话:

A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries。

命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。

命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。

我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。


名空间查找顺序:


假设我们要使用变量 runoob,则 Python 的查找顺序为:局部的命名空间去 -> 全局命名空间 -> 内置命名空间。


如果找不到变量 runoob,它将放弃查找并引发一个 NameError 异常:


NameError: name 'runoob' is not defined。

命名空间的生命周期:


命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束。


因此,我们无法从外部命名空间访问内部命名空间的对象。


实例

# var1 是全局名称

var1 = 5

def some_func():

 

    # var2 是局部名称

    var2 = 6

    def some_inner_func():

 

        # var3 是内嵌的局部名称

        var3 = 7

如下图所示,相同的对象名称可以存在于多个命名空间中。




作用域

A scope is a textual region of a Python program where a namespace is directly accessible. "Directly accessible" here means that an unqualified reference to a name attempts to find the name in the namespace.


作用域就是一个 Python 程序可以直接访问命名空间的正文区域。


在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。


Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。


变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python 的作用域一共有4种,分别是:


有四种作用域:


L(Local):最内层,包含局部变量,比如一个函数/方法内部。

E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。

G(Global):当前脚本的最外层,比如当前模块的全局变量。

B(Built-in): 包含了内建的变量/关键字等,最后被搜索。

规则顺序: L –> E –> G –> B。


在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。




g_count = 0  # 全局作用域

def outer():

    o_count = 1  # 闭包函数外的函数中

    def inner():

        i_count = 2  # 局部作用域

内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:


>>> import builtins

>>> dir(builtins)

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码:


>>> if True:

...  msg = 'I am from Runoob'

... 

>>> msg

'I am from Runoob'

>>> 

专业网站建设-网站设计-网站制作与网站开发-高端品牌企业宣传策划-广元上往建站


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务