python类中的属性分为类属性和实例属性两种_python从入门到大神---1、初始化实例、类属性、方法...

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) #. 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)    #. at 0x000001D1244300D0>

print(p6.get_grade())  #A

#直接把lambda函数赋值给self.get_grade和绑定方法有所不同,函数调用不需要传入self,但是方法调用需要传入self。

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

#p6.get_grade()是方法,前面的p6就是调用这个方法的对象,即实例,整句来说就是实例方法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

RPM方式安装MySQL5.5.48 (Aliyun CentOS 7.0 &; 卸载MySQL5.7)

环境是阿里云的CentOS7.0,更新了yum源(更新yum源请参考https://help.aliyun.com/knowledge_detail/5974184.html)之后先是尝试安装了MyS ...

margin:0 auto;不能居中的原因

原因: 1.没有设置本身元素和父元素的宽度 2.本身元素使用了绝对定位和浮动 2.没声明DOCTYPE

hdu 4665 搜索

思路:直接搜索 #include #include #include #include

mongodb3.2系统性学习——5、游标 模糊查询 findAndModify函数

1首先介绍查询结果 返回的过程: 进行查询的时候mongodb 并不是一次哪个返回结果集合的所有文档,而是以多条文档的形式分批返回查询的结果,返回文档到内存中. 好处: 减少了客户端与服务器端的查询负 ...

Java中随机数生成的两种方法,以及math的floor

1.Math的random方法,调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选 ...

终极锁实战:单JVM锁+分布式锁

目录 1.前言 2.单JVM锁 3.分布式锁 4.总结 =========正文分割线================= 1.前言 锁就像一把钥匙,需要加锁的代码就像一个房间.出现互斥操作的场景:多人同 ...

shiro(三),使用第三方jdbcRealm连接数据库操作

这里采用第三方实现好的JdbcRealm连接数据库:首先来看一下源码: 接着前面的说:就把这个类当做我们自己写的就好了,我们需要实例化它,然后给他注入一个数据源 下面是ini文件配置 [main] # ...

[Swift]LeetCode986. 区间列表的交集 | Interval List Intersections

Given two lists of closed intervals, each list of intervals is pairwise disjoint and in sorted order ...

JDBC中常用的接口

JDBC常用的接口DriverManager 驱动管理器获得数据库链接 Connection 数据库链接接口 Statement 语句接口,用来静态操作SQL语句 PreparedStatement ...

BSTR 转 char*

#include #include #pragma comment(lib,"comsuppw.lib") _ ...

你可能感兴趣的:(python类中的属性分为类属性和实例属性两种_python从入门到大神---1、初始化实例、类属性、方法...)