day15 面向对象 成员
成员
1. 变量
1.实例变量
格式:
变量.xxx=xx (称为实例变量,也叫属性,字段)给对象用的
2.类变量
类变量:直接写在类中的变量就是类变量,类变量一般用类名来访问
其实就是类中相同的属性提取出来
总结:实例变量, 给对象用的的.
类变量, 多个对象共享的. 最好是用类名来访问. 这样更加规范.
例:
class Person:
cooutry="中国"
def __init__(self,name,age):
self.name=name
self.age=age
Person.country="大清" #类变量只能通过类名来改变
p1=Person("小王",18)
p1.country="大清" #尽管对象拥有country这个类变量,但是并不会修改类变量,
#只是给p1赋值了一个实例变量
print(p1.country) #大清
print(Person.country) #直接通过类名访问 大清 p2=Person("小红",16)
print(p2.country) #大清
2.方法
1.实例方法
语法:
对象.方法() 直接调用
说白了就是对象直接调用的方法 2.类方法 加前缀@classmethod
例:class Person:
def chi(self):
print("好吃")
@classmethod
def he(cls): 参数第一个位置要预留,默认为(cls),
print("吃") 而静态方法,不需要预留这个,这是他们的区别
p1=Person()
p1.he() #不管是类还是对象访问类方法,默认传进去的是类
最好是用类名去访问
3.静态方法 加前缀@staticmethod
例:
class Computer:
def play(self):
print("我的电脑可以玩")
@staticmethod 静态方法第一个参数位置不需要预留
def fare() : 可以用对象访问也可以用类名访问,最好用对象
print("我的电脑好, 可以煎鸡蛋") 访问,以区分类方法和实例方法(相当于在类中定义一个普通函数)
@classmethod
def cal(cls, a, b):
print(cls)
return a+b
print(Computer.cal(1, 2)) # 此时会自动的把类名传递给类方法的第1个参数
3.属性
语法: 对象.属性
class ren:
def __init__(name ,birthday)
self.name=name
self.birthday=birthday
@property #把方法转为属性
def age(self)
return 2018-self.birthday
r=ren("小王",1995)
age=r.age
print(age)
注:
1.方法只能有一个参数self
2.必须加前缀@property
3.调用时候,不需要括号,直接当成属性来使用就行
4.只能取值,不能赋值(需要有返回值)
4.私有
1.私有变量 2.私有方法 (注,私有方法,子类是无法继承的)
例:
class Person:
def __init__(self,name):
self.__name=name #私有变量
print("这里是构造函数(方法)")
def init(self):
print("这里是实例方法")
return self.__name
def __chi(self):
print("这里是私有方法")
def __laopo(self):
print("这是刘强东的老婆")
def he(self):
self.__laopo()
print("让你看看怎么调用私有的,比如别人的老婆")
p=Person("小王")
print(p.__name) #报错,访问不到 私有变量
p._chi() #报错,访问不到 私有方法
name=p.init()
print(name) #通过其他方法访问到私有变量
p.he() #老婆是刘强东的,但是我把她报出来玩了(
# 可以把别人的老婆(私有的)带到自己的世界玩,)
#(在自己的世界,别人私有的想怎么玩就怎么玩)
#总结:私有变量不是绝对的,可以通过其他非私有方法访问
# 静态变量和类变量是一样的道理
例
关于私有方法的一种注意事项,引用自老师
#正常情况
>>> class A:
... def fa(self):
... print('from A')
... def test(self):
... self.fa()
...
>>> class B(A):
... def fa(self):
... print('from B')
...
>>> b=B()
>>> b.test()
from B #把fa定义成私有的,即__fa
>>> class A:
... def __fa(self): #在定义时就变形为_A__fa
... print('from A')
... def test(self):
... self.__fa() #只会与自己所在的类为准,即调用_A__fa
...
>>> class B(A):
... def __fa(self):
... print('from B')
...
>>> b=B()
>>> b.test()
from A
day15 面向对象 成员的更多相关文章
- Python基础面向对象成员
面向对象中成员 字段: 静态字段保存在类中:静态字段在代码加载时被创建 普通字段保存在对象中: 规则: 普通字段只能用对象访问: 静态字段用类去访问(万不得已的时候可以使用对象访问) #!/usr/b ...
- C#面向对象——成员变量及封装
namespace 面向对象5_22 { class Animal { private string _Type; public string Type { get { return _Type; } ...
- python --- 17. 面向对象成员
面向对象的成员 能写的所有成员 一.变量 1.实例变量 访问时 对象.变量 2.类变量 访问时 类名.变量 注意: 二.方法 1.实例方法 必须有一个参数(self) 调用时 ...
- Python【day 17-2】面向对象-成员
'''''' ''' 1.简述面向对象三大特性并用示例解释说明?[背写] 1.封装 狭义的封装:把一组属性封装到一个对象,创建对象的时候 广义的封装:代码块,函数.对象.类.模块-py文件都是封装 把 ...
- java面向对象---成员变量和成员函数
//成员变量 1.类定义了对象中所具有的变量,这些变量称作成员变量 2.每个对象都有自己的变量,和同一个类的其他对象的分开的 //函数与成员变量 1.在函数中可以直接写成员变量的名字来访问成员变量,那 ...
- python之路--面向对象-成员
一 . 成员 在类中你能写的所有内容都是类的成员 class 类名: # 方法 def__init__(self, 参数1, 参数2...): # 属性变量 self.属性1 = 参数1 self.属 ...
- python -- 面向对象-成员
1.成员 在类中,你能写的所有内容都是类的成员 2.变量 1.实例变量:由对象去访问的变量,一般使用是 对象 . 属性 class Person: def __in ...
- python学习 day016打卡 面向对象--成员
本节主要内容: 1.类的成员 2.类的成员-变量 3.类的成员-方法 4.类的成员-属性 5.私有 一.类的成员: 能在类中写的内容就是类的成员. class 类名: #方法 def __init__ ...
- day17 面向对象-成员
今日主要学习了: 1 .成员 2. 变量 3. 方法 4.属性 5.私有 1. 成员 在类中你能写的所有内容都是成员 2 .变量 1) 实例变量: 昨天写的就是实例变量 ,由对象去访问的变量 . cl ...
随机推荐
- MyBatis中动态SQL语句完成多条件查询
一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...
- Serializable 和 parcelable的实现和比较
首先这个两个接口都是用来序列化对象的 但是两者在性能和应用场合上有区别,parcelable的性能更好,但是在需要保存或者网络传输的时候需要选择Serializable因为parcelable版本在不 ...
- Codeforces 1107E (Vasya and Binary String) (记忆化,DP + DP)
题意:给你一个长度为n的01串,和一个数组a,你可以每次选择消除一段数字相同的01串,假设消除的长度为len,那么收益为a[len],问最大的收益是多少? 思路:前两天刚做了POJ 1390,和此题很 ...
- Python中for else注意事项
假设有如下代码: for i in range(10): if i == 5: print 'found it! i = %s' % i else: print 'not found it ...' ...
- Easyui datebox单击文本框显示日期选择 eayui版本1.5.4.1
Easyui默认是点击文本框后面的图标显示日期,体验很不好,所以我想单击文本框就显示日期选择框,网上很多版本是1.3,1.4的,于是自己就比葫芦画瓢改了一个1.5.4.1的版本. 我参考了网上这个帖子 ...
- 面试题:Concurrenthashmap原理分析 有用
一.背景: 线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap. 效率低下的H ...
- 339E Three Swaps
传送门 题目大意 给出由1-n组成的序列,每次可将一个区间翻转.问如何从1-n的递增序列变成给出的序列,输出操作次数以及每次操作的区间.最多翻转3次,保证有解,输出任意方案即可. 分析 我们对于每一次 ...
- Luogu 1514 [NOIP2010] 引水入城
我就是过来开心一下……这道题从开坑以来已经堆积了大半年了……今天才发现广搜一直写挂…… 丢个线段覆盖的模板,设$f_{i}$表示覆盖区间[1, i]的最小代价,$g_{i, j}$表示覆盖区间[i, ...
- 小组作业wordCountPro·
基本任务:代码编写+单元测试 (1) Github地址: https://github.com/LongtermPartner/ExtendWordCount (2) PSP表格: psp 2.1 ...
- 小小c#算法题 - 12 - Joseph Circle(约瑟夫环)
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数(从1开始报数),数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又 ...