python从入门到大神---1、初始化实例、类属性、方法

一、总结

一句话总结:

方法不加括号是代码段:感觉python方法和js,php很类似,不加括号是代码段,加括号变成方法,比如f,f()

1、python如何 初始化实例属性?

直接赋值:和其它语言一样
参数数组形式:使用**kw,除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过setattr(self, 'name', 'xxx')设置属性。
class Person(object):
def __init__(self, name, gender, **kw):
self.name = name
self.gender = gender
for k,v in kw.items():
setattr(self, k, v) xiaoming = Person('Xiao Ming', 'Male', birth='1990-1-1', job='Student')
print(xiaoming.name)
print(xiaoming.job)

2、python 类中的私有成员 长什么样?

双下划线开头:比如"__score",不能直接被外部访问。
class Person1(object):
def __init__(self, name, score):
self.name = name
self._gender = 'Male'
self.__score = score
p1 = Person1('Bob', 59)
try:
print(p1.__score) #AttributeError: 'Person1' object has no attribute '__score'
except AttributeError:
print('attrbuteerror')

3、python如何 创建类属性(区别类属性和实例属性)?

类属性只有一份:实例属性每个实例都各自拥有,互相独立,而类属性有且只有一份。
类名.类属性访问:Person3.count访问类的属性
#请给Person3类添加一个类属性count每创建一个实例count属性就加1这样就可以统计出一共创建了多少个Person3的实例。
class Person3(object):
count = 0
def __init__(self, name):
self.name = name
Person3.count += 1
p3 = Person3('Alice')
print(p3.count)
p3_1 = Person3('Tim')
print(p3_1.count)

4、python中类属性能设置为私有模式么?

可以:可以加上访问方法
#请把上节的Person3类属性count改为__count,再试试能否从实例和类访问该属性。
class Person4(object):
__count = 0
def __init__(self, name):
self.name = name
Person4.__count += 1
print(Person4.__count)
p4 = Person4('Bob')
p4_1 = Person4('Alice')
try:
print(Person4.__count) #AttributeError: type object 'Person4' has no attribute '__count'
except AttributeError:
print('AttributeError')

5、一个实例的私有属性就是以__开头的属性,无法被外部访问,那这些属性定义有什么用?

定义公共方法来访问:虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。除了可以定义实例的属性外,还可以定义实例的方法。
class Person5(object):
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
p5 = Person5('Bob')
print(p5.get_name())

6、python类中 self.get_grade = lambda: 'A' 是什么意思?

|||-begin

class Person6(object):
def __init__(self, name, score):
self.name = name
self.score = score
self.get_grade = lambda: 'A'
p6 = Person6('Bob', 90)
print(p6.get_grade) #<function Person6.__init__.<locals>.<lambda> at 0x000001D1244300D0>
print(p6.get_grade()) #A

|||-end

属性值是对象:p6.get_grade是属性,只不过这里的属性是一个函数对象.

二、Python 面向对象编程基础——初始化实例、类属性、方法

参考:Python 面向对象编程基础——初始化实例、类属性、方法
https://www.cnblogs.com/zhang-teng/p/6203724.html

#1.初始化实例化属性。
#可接受任意关键字参数,并把他们都作为属性赋值给实例。使用**kw,除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过setattr(self, 'name', 'xxx')设置属性。
class Person(object):
    def __init__(self, name, gender, **kw):
        self.name = name
        self.gender = gender
        for k,v in kw.items():
            setattr(self, k, v)
           
xiaoming = Person('Xiao Ming', 'Male', birth='1990-1-1', job='Student')
print(xiaoming.name)
print(xiaoming.job)

#2.类中的私有成员,双下划线开头的"__score"不能直接被外部访问。
class Person1(object):
    def __init__(self, name, score):
        self.name = name
        self._gender = 'Male'
        self.__score = score
p1 = Person1('Bob', 59)
try:
    print(p1.__score)  #AttributeError: 'Person1' object has no attribute '__score'
except AttributeError:
    print('attrbuteerror')

#3.创建类属性。实例属性每个实例都各自拥有,互相独立,而类属性有且只有一份。
class Person2(object):
    address = 'Earth'
    def __init__(self, name):
        self.name = name
print(Person2.address)
p2 = Person2('Tom')
print(Person2.address)
#请给Person3类添加一个类属性count每创建一个实例count属性就加1这样就可以统计出一共创建了多少个Person3的实例。
class Person3(object):
    count = 0
    def __init__(self, name):
        self.name = name
        Person3.count += 1
p3 = Person3('Alice')
print(p3.count)
p3_1 = Person3('Tim')
print(p3_1.count)

#4.python中类属性和实例属性名字冲突怎么办?
#请把上节的Person3类属性count改为__count,再试试能否从实例和类访问该属性。
class Person4(object):
    __count = 0
    def __init__(self, name):
        self.name = name
        Person4.__count += 1
        print(Person4.__count)
p4 = Person4('Bob')
p4_1 = Person4('Alice')
try:
    print(Person4.__count)  #AttributeError: type object 'Person4' has no attribute '__count'
except AttributeError:
    print('AttributeError')
##类属性的公开和私有,如果没有双下划线,外部可以调用,如果有,只能在类内部使用。

#5.一个实例的私有属性就是以__开头的属性,无法被外部访问,那这些属性定义有什么用?
#虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。除了可以定义实例的属性外,还可以定义实例的方法。
#实例的方法就是在类中定义的函数,它的第一个参数永远是self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的:
class Person5(object):
    def __init__(self, name):
        self.__name = name
    def get_name(self):
        return self.__name
p5 = Person5('Bob')
print(p5.get_name())
#任务:请给Person5类增加一个私有属性__score,表示分数,再增加一个实例方法get_grade(),
#能根据__score的值分别返回A-优秀, B-及格, C-不及格三档。
class Person6(object):
    def __init__(self, name, score):
        self.name = name
        self.__score = score
    def get_grade(self):
        if self.__score >= 80:
            return "A-Excellent"
        elif self.__score >= 60:
            return "B-Passed"
        return "C-Failed"
p6_1 = Person6('Bob', 89)
p6_2 = Person6('Alice', 69)
p6_3 = Person6('Tim', 59)
print(p6_1.get_grade())
print(p6_2.get_grade())
print(p6_3.get_grade())

#6.python中方法也是属性,由于属性可以是普通的值对象,如str,int等,也可以是方法,还可以是函数,大家看看下面代码的运行结果,请想一想p6.get_grade为什么是函数而不是方法:
class Person6(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
        self.get_grade = lambda: 'A'
p6 = Person6('Bob', 90)
print(p6.get_grade)    #<function Person6.__init__.<locals>.<lambda> at 0x000001D1244300D0>
print(p6.get_grade())  #A
#直接把lambda函数赋值给self.get_grade和绑定方法有所不同,函数调用不需要传入self,但是方法调用需要传入self。
#p6.get_grade是属性,只不过这里的属性是一个函数对象.
#p6.get_grade()是方法,前面的p6就是调用这个方法的对象,即实例,整句来说就是实例方法

 

python从入门到大神---1、初始化实例、类属性、方法的更多相关文章

  1. python从入门到大神---Python的jieba模块简介

    python从入门到大神---Python的jieba模块简介 一.总结 一句话总结: jieba包是分词技术,也就是将一句话分成多个词,有多种分词模型可选 1.分词模块包一般有哪些分词模式(比如py ...

  2. python从入门到大神---4、python3文件操作最最最最简单实例

    python从入门到大神---4.python3文件操作最最最最简单实例 一.总结 一句话总结: python文件操作真的很简单,直接在代码中调用文件操作的函数比如open().read(),无需引包 ...

  3. python从入门到大神---2、和Python编程相遇的日子

    python从入门到大神---2.和Python编程相遇的日子 一.总结 一句话总结: python2和python3是很不同的,连语法都不同,比如 print 函数打印结果 1.python中pip ...

  4. python从入门到大神---3、浮光掠影python3语法

    python从入门到大神---3.浮光掠影python3语法 一.总结 一句话总结: 语法不必一次记全部,效率太差,用哪部分内容,就把那部分内容全部记下来 1.python3中单引号和双引号的区别是什 ...

  5. Python 爬取各大代理IP网站(元类封装)

    import requests from pyquery import PyQuery as pq base_headers = { 'User-Agent': 'Mozilla/5.0 (Windo ...

  6. 《java入门第一季》之类(String类常见方法小叙)

    String类下面的构造方法和一些常见的方法: /* * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,可以知道 * A:字符串字面值"abc&quo ...

  7. Python从菜鸟到高手(18):类与方法的私有化

    1. 创建自己的类 学习面向对象的第一步,就是创建一个类.因为类是面向对象的基石.Python类和其他编程语言(Java.C#等)的类差不多,也需要使用class关键字.下面通过一个实际的例子来看一下 ...

  8. Python从入门到超神之文件处理

    一.文件处理流程(python默认是utf-8编码) 打开文件函数:open(文件路径,encoding=‘utf-8’)注意:open会检索系统的编码,所以需要调整一致否则报错 例如:fi=open ...

  9. 微信小程序用setData修改数组或对象中的一个属性值,超好用,最简单的实现方法,不容错过!大神们 都 在 看 的方法!!!

    在page中 data: { info: [{ name: "yuki", tou: "../img/head.jpg", zGong: 130, gMoney ...

随机推荐

  1. Shiro学习(24)在线回话管理

    有时候需要显示当前在线人数.当前在线用户,有时候可能需要强制某个用户下线等:此时就需要获取相应的在线用户并进行一些操作. 本章基于<第十六章 综合实例>代码构建. 会话控制器 Java代码 ...

  2. vue基础四

    1.绑定Html Class(在 v-bind 用于 class 和 style 时, Vue.js 专门增强了它.表达式的结果类型除了字符串之外,还可以是对象或数组) 1.1对象语法 传给v-bin ...

  3. Android_开发片段(Part 3)

    1.Android中的五种布局方式:线性布局(Linear Layout).相对布局(Relative Layout).表格布局(Table Layout).网格视图(Grid View).标签布局( ...

  4. 微信小程序利用canvas生成海报分享图片

    一 . 效果 这是借用女神照生成的分享的海报,图片来自网络. 新增了poster组件和更新图片自适应 二 . 准备 准备两张图片连接,最好是自己开发账号验证的https图片链接. 三 . 实现思路 其 ...

  5. 提升R代码运算效率的11个实用方法

    提升R代码运算效率的11个实用方法 众所周知,当我们利用R语言处理大型数据集时,for 循环语句的运算效率非常低.有许多种方法可以提升你的代码运算效率,但或许你更想了解运算效率能得到多大的提升.本文将 ...

  6. C++——数据结构之链表

    直接上例子 int main() { ,,}; ,,}; Listnode *head=NULL,*temp; head=(Listnode*)malloc(sizeof(Listnode));//头 ...

  7. js获取url中的中文参数出现乱码

    解决方法 function getQueryString(key){ var reg = new RegExp("(^|&)"+key+"=([^&]*) ...

  8. 剑指offer——04二维数组中的查找

    题目: 数组中唯一只出现一次的数字.在一个数组中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字. 题解: 如果一个数字出现三次,那么它的二进制表示的每一位(0或者1)也出现 ...

  9. ios网络学习------2 用非代理方法实现同步post请求

    #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark post登录方法 -(void) ...

  10. VisualStuido中将C#脚本封装打包DLL并调用

    DLL (Dynamic Link Library)---动态链接库 首先了解下使用DLL的优势,程序运行时不用加载所有代码,只有运行到引用时,才从DLL库中取出.并且使用DLL文件还可以减小程序体积 ...