Python 私有化属性
# 对象的基本理论
# 什么事对象?
# 万物皆对象
# 对象是具体物体
# 拥有属性
# 拥有行为
# 把很多零散的东西,封装成为一个整体
# 举例:王二小
# 属性
# 姓名
# 年龄
# 身高
# 体重
# 行为
# 走路
# 吃饭
# 放羊
# Python中的体现
# 是一门特别彻底的面向对象编程(OOP)的语言
# 其他语言:基本数据类型,对象类型
# python全部类型都是对象类型
# 面向对象是面向过程的封装
# 对象和类的关系:对象 可以抽象为类 类可以实例化为对象 class Money:
pass print(Money) #<class '__main__.Money'>
one = Money()
print(one, type(one)) #<__main__.Money object at 0x030CFBB0> <class '__main__.Money'> class Person:
pass # 对象的操作:增
p = Person()
# 查看对象的所有属性
print(p.__dict__) #{}
p.age = 18
p.height = 180
print(p.__dict__) #{'age': 18, 'height': 180} # 对象的操作:删
del p.age # 对象的操作:改
p.height = 185 # 对象里面如果有这个属性,就是修改,否则就是增加这个属性 # 类里面的 __dict__ 不可以修改,只读的
# 对象里的 __dict__ 可以修改
class Test:
age = 18 #Test.__dict__["age"] = 20 #TypeError: 'mappingproxy' object does not support item assignment one = Test() one.__dict__ = {"name":"abc", "height":180} #就是说__dict__字典里面生存储属性的变量
print(one.__dict__) #{'name': 'abc', 'height': 180} # 理解下面的内容
class Person:
age = 10 p = Person() print(Person.age) #
print(p.age) # p.age += 5 # p.age = p.age + 5
# 要理解这个在对象和类的操作方法:首先是计算右边的值,p.age 在对象p中没有,所以他要到类中去取age = 10
# 然后变成10+5 = 15, 然后在p对象中新增加个age属性(以前说过,对象没有就是新增,有的话就是修改) print(Person.age) #
print(p.age) # # __slot__
class Person:
__slots__ = {"age"} #只可以加入age的属性 p1 = Person()
p1.age = 18
print(p1.age) # 方法:实例方法,类方法,静态方法 class Person:
def eat(self):
print("这是个实例方法", self) @classmethod
def eat2(cls):
print("这是个类方法", cls) @staticmethod
def eat3():
print("这是个静态方法") p = Person()
print(p)
p.eat()
p.eat2()
p.eat3()
# <__main__.Person object at 0x032F54F0>
# 这是个实例方法 <__main__.Person object at 0x032F54F0>
# 这是个类方法 <class '__main__.Person'>
# 这是个静态方法
print("-" * 30)
#另外的调用方式:
Person.eat("") #这里必须要有个参数,才能调用成功
Person.eat2()
Person.eat3() print("-" * 30)
# 实例方法,类方法,静态方法的访问权限问题(包括类属性,实例属性)
class Person:
age = 10
# 实例方法
def shilie(self):
print(self)
print(self.age)
print(self.num) # 类方法
@classmethod
def leifangfa(cls):
print(cls)
print(cls.age)
print(cls.num) # 不可以使用实例属性 # 静态方法
@staticmethod
def jingtai():
print(Person.age) # 能使用类里面的属性,但很少这样去调用的 p = Person()
p.num = 11 p.shilie() # 实例方法:可以调用实例属性和类属性
#p.leifangfa() # 类方法:不可以使用实例属性
p.jingtai() # 静态方法:可以使用类属性,不可以使用实例属性 # 元类
num = 123
str = "abc"
print(num.__class__.__class__) # <class 'type'>
print(str.__class__.__class__) # <class 'type'>
print(Person.__class__) # <class 'type'>
print(Person.__class__.__class__)# <class 'type'>
print(p.__class__.__class__) # <class 'type'> # ----------------------------另外一种创建类的方式-------------------------
def run(self):
print(self) dog = type("Dog",(),{"name":"abc","run":run}) #字典里面可以是类属性,或者类方法
print(dog.name) #abc
print(dog.run) #<function run at 0x02B56C90> # ---------------------------类的创建流程---------------------------------- class Animal:
# __metaclass__ = xxx
pass class Person(Animal):
# __metaclass__ = xxx
pass # -------------------------类的描述, pydoc 模块---------------------------------------
class Person:
"""
关于类的描述,类的左右,类的构造函数
Attribute:
属性的描述
"""
def run(self, distence, step):
"""
函数的作用
:param distence:参数含义,数据类型,默认值
:param step:
:return: 返回值类型
"""
return distence / step # help(Person) # 可以这样看帮助文档 # ------------------------ 私有化属性(类的内部,子类内部,模块内部,模块外部)4大块 ------- class Animal:
x = 10
_y = 20
__z = 30
def test(self):
print(Animal.x)
print(self.x)
print(Animal._y)
print(self._y)
print(Animal.__z)
print(self.__z)
print("-" * 30) class Dog(Animal):
def test2(self):
print(Dog.x)
print(self.x)
print(Dog._y)
print(self._y)
# print(Dog.__z) # 错误
# print(self.__z) # 错误
print("-" * 30) # 类的内部访问
a = Animal()
a.test() # 成功打印x # 子类的内部访问
d = Dog()
d.test2() # 成功打印x # 模块内部访问
# print(Animal.x) # 成功打印x
# print(Dog.x) # 成功打印x
# print(a.x) # 成功打印x
# print(d.x) # 成功打印x
# print(a.__z) # 有错误
#
# print(Animal._y) # 成功打印_y,但有警告
# print(Dog._y) # 成功打印_y,但有警告
# print(a._y) # 成功打印_y,但有警告
# print(d._y) # 成功打印_y,但有警告
# print(a.__z) # 有错误
# print(d.__z) # 有错误 print(Animal.__dict__)
print(Animal._Animal__z) # 伪私有 30
# 模块外的访问
import public
print(public.num) # 成功打印num
print(public._num2) # 另外一种模块导入方法
from public import *
# 直接写public 模块中的变量
print(num) # 成功打印num
# print(_num2) # 有错误
Python 私有化属性的更多相关文章
- Python——私有化 和 属性property
Python——私有化 和 属性property 一.私有化 xx: 公有变量 _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问 ...
- 【代码学习】PYTHON 私有化
一.私有化 xx: 公有变量_x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问__xx:双前置下划线,避免与子类中的属性命名冲突,无 ...
- 私有化 : _x: 单前置下划线,私有化属性或方法;__xx:双前置下划线;__xx__:双前后下划线;属性property
私有化 xx: 公有变量 _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问 __xx:双前置下划线,避免与子类中的属性命名冲突,无 ...
- python 类属性与方法
Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...
- python 类属性和实例属性
class AAA(): aaa = 10 # 情形1 obj1 = AAA() obj2 = AAA() print obj1.aaa, obj2.aaa, AAA.aaa # 情形2 obj1.a ...
- js私有化属性
我们先来看一个例子: var Demo1 = function(val){ this.value = val; this.getValue = function(){ return this.valu ...
- python类属性和类方法(类的结构、实例属性、静态方法)
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
- 关于Python类属性与实例属性的讨论
标题名字有点长. 之所以想写这个文章是因为碰巧看到网上一篇关于Pyhon中类属性及实例属性区别的帖子.因为我之前也被这个问题困扰过,今天碰巧看到了这篇帖子,发现帖子的作者只是描述了现象,然后对原因的解 ...
- javascript 私有化属性,和公共属性
function TestClassA(name, number) { this.name = name; //public this.number = number; //public var ac ...
随机推荐
- python之进制转换
Python中二进制是以0b开头的: 例如: 0b11 则表示十进制的3 8进制是以0开头的: 例如: 011则表示十进制的9 16进制是以0x开头的: 例如: 0x11则表示十进制 ...
- 编写高质量代码--改善python程序的建议(七)
原文发表在我的博客主页,转载请注明出处! 建议三十四:掌握字符串的基本用法 编程有两件事,一件是处理数值,另一件是处理字符串,在商业应用编程来说,处理字符串的代码超过八成,所以需要重点掌握. 首先有个 ...
- JRE not compatible with workspace .class file compatibility: 1.7
在进行Eclipse开发的时候,经常会遇到一些小问题,现在开始每天积累一些小问题的解决方法.出现:JRE not compatible with workspace .class file compa ...
- zookeeper简单操作
接下来主要讲述了通过zookeeper服务器自带的zkCli.sh工具模拟客户端访问和操作zookeeper服务器(包括集群服务器). 当成功启动zookeeper服务后,切换到server1/bin ...
- ES6入门概览一
一.let const 1.let命令:声明变量仅在块级作用域有效:let实际上为js新增了块级作用域 好处: -不存在变量提升: -内部声明的变量 函数 不会影响外部 -不可重复声明变量 2.con ...
- MySQL中的注释(有三种)
MysQL支持三种注释: .#... (推荐这种,具有通性) ."-- ..." (注意--后面有一个空格) ./*...*/
- Java 之综合练习
// 练习一: 写出程序结果 interface A{} class B implements A { public String func() { return "func"; ...
- Java 之内部类
概述 内部类修饰符 内部类的细节 局部内部类 匿名内部类及其应用 匿名内部类细节 内部类概述 将一个类定义在另一个类的里面, 里面的那个类就称为内部类(内置类, 嵌套类). class Outer { ...
- 东方通tongweb linux安装
1.把安装的bin文件和license.dat文件放到/opt目录下 2.运行$sh Install_TW5.0.0.0_Standard_Linux.bin -i console 命令在 Linux ...
- settings配置与model优化
settings配置与model优化 settings: 项目基本配置(settings.py, models.py, admin.py, templates...).数据库操作.中间件 http: ...