实训笔记20190725

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43895902/article/details/97290383

class Person:
	name='swk'#全局赋值
	pass
class Myclass:
	pass#pass表示此处可以写很多代码,简称:资源占位符
print(type(Myclass))#<class 'type'>
print(Myclass)#<class '__main__,Myclass'>

mc1=person()
mc2=person()
mc3=person()
print(mc1)
print(mc2)
print(mc3)
#python的对象具有内存地址存储数据的唯一性

result1=isinstance(mc1,Person)
result2=isinstance(mc2,Person)
result3=isinstance(mc3,Person)
print(result1)
print(result2)
print(result3)
#mc*都是person的实例,他们都是一类对象--也是'一个类'的实例化操作
#isinstance()用来检查一个人对象是否是一个类的实例,和Java中this关键字功能一样

this关键字表示’区分’当前对象–不一样的内存管理机制

print(id(Person))#通过id方法查看对象的内存地址
print(type(Person))#值?<class’type’>–类类型

对象的初始化

  • 什么是对象的初始化
    1. 就是给对象的方法,属性等赋值的方法
class Person:
	def say_hello(self):#name可以不用定义
		print('hello%s'%self.name)
	pass

p1=Person()
p1.say_hello()#通过对象调用方法
print()#打印输出

p2=Person()
p2.name='swk'
p2.name='zjl'```
p2.say_hello()
print()
#此处name属性和name一样this.name=name
#以上赋值称为动态赋值

class Person:
	def __init__(self,name):
        # 通过self向新建的对象中初始化属性
        #操作对象的核心代码(封装,继承,多态)
        self.name = name

    def say_hello(self):
        print('大家好,我是%s'%self.name)

在Python语言当中通过方法调用对象的 属性值 和

class Dog():
	def __init__(self,name):
		self.name=name
d=dog()#不带参的构造器
d=Dog('狗')#对象
d.name='小黑'#调用方法
print(d.name)

#一个完整的对象操作实例
class Dog2():
	def __init__(self,name):
		#init方法很浪费内存
		#自定义一个隐藏属性
		self.hidden_name=name#hiddenname是name的别名称
		#self.name=name
	def get_name(self):#get方法必须有返回值
		return self.hidden_name
	def __set_name__(self,name):#set方法至少带有两个参数
		self.hidden_name=name#set方法里面必须判断对象名称
	def say_hello(self):
		print('大家好,我是%s'%self.hidden_name)
d2=Dog2('大黄')
d2.say_hello()
print(d2.get_name())
print(d2.get_name(),id(Dog2))
d2.__set_name__('旺财')
print(d2.get_name())
#self.hiddenname=name等价于Java的私有化成员你变量,属性,方法private

set方法可以自定义
1. 调用底层写法: def set_name(self,owner,name):
尽量使用自定义方法,自定义的Python不进入底层执行,效率高

get方法可以自定义
1. Python里面底层不封装get方法,因为get方法是一个程序员可以自定义的普通方法/普通函数,但是程序员也去底层自己定义封装一个代码块,再去调用

  1. init会在对象创建之后离开执行
  2. init可以用来向新创建的对象中初始化属性
  3. 调用类创建对象是,类后面的所有参数都会依次传递到init()中
class Dog2():
	def __init__(self,name,age):
		self.hidden_name=name#hiddenname是name的别名称
		self.hidden_age=age
	def get_name(self):#get方法必须有返回值
		return self.hidden_name
	def __set_name__(self,name):#set方法至少带有两个参数
		self.hidden_name=name#set方法里面必须判断对象名称
	def set_age(self,age):
		#set里面可以进行一系列的计算判断,循环条件的操作
		self.hidden_age=age
	def  get_age(self):
		return self.hidden_age
	def say_hello(self):
		print('大家好,我是%s'%self.hidden_name)
d2=Dog2('大黄')
d2.say_hello()
print(d2.get_name())
print(d2.get_name(),id(Dog2))
d2.__set_name__('旺财')
print(d2.get_name())
print(d2.get_age)

问: 在Python中类或者对象的封装性如何体现?
答: 给对象的属性定义别名

#计算举行面积
class Rectangle:
	def __init__(self,height,width):
		self.hidden_height=height
		self.hidden_width=width
	def get_height(self):
		return self.hidden_height
	def get_width(self):
		return self.hidden_width
	def set_height(self,height):
		self.hidden_height=height
	def set_width(self,width):
		self.hidden_width=width
	def get_area(self):
		return self.hidden_height*self.hidden_width
r=Rectangle(5,4)
r.set_height(7)
r.set_width(8)
print(r.get_area())

两个下划线的作用原理:

  1. 是一个通配符,在Python里面是独一无二的
  2. 可以表示一个思想(万物皆为对象)
  3. 可以用来获取对象的所有属性的值

使用__开头的属性,实际上依然可以在外部访问,所以这种方式我们一般不用一般我们会将一些私有属性(不希望被外部访问的属性)以_开头
一般情况下,使用_开头的属性都是私有属性,没有特殊需要不要修改私有属性

print(p.Person)

property装饰器,用来将一个get方法,转换为对象的属性
添加为property装饰器以后,我们就可以像调用属性一样使用get方法
使用property装饰的方法,必须和属性名是一样的

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    # property装饰器,用来将一个get方法,转换为对象的属性
    # 添加为property装饰器以后,我们就可以像调用属性一样使用get方法
    # 使用property装饰的方法,必须和属性名是一样的
    @property
    def name(self):
        print('get方法执行了~~~')
        return self._name

    # setter方法的装饰器:@属性名.setter
    @name.setter
    def name(self, name):
        print('setter方法调用了')
        self._name = name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        self._age = age


p = Person('猪八戒', 18)

p.name = '孙悟空'
p.age = 28

print(p.name, p.age)

‘’’
3.用户:创建一个名为UserUser的类,其中包含属性first_name和last_name,
还有用户简介通常会存储的其他几个属性。在类User中定义一个名为
describe_user()的方法,它打印用户信息摘要;
再定义一个名为greet_user()的方法,它向用户发出个性化的问候。
创建多个表示不同用户的实例,并对每个实例都调用上述两个方法.
‘’’

class User():
	def __init__(self,first_name,last_name,age,sex,phone,login_attempts=0):
		self.first_name=first_name
		self.last_name=last_name
		self.age=age
		self.sex=sex
		self.phone=phone
		self.login_attempts=login_attempts

	def describe_user(self):
		print('大家好我叫%s %s,我今年%d岁,我的电话是%s'%(self.first_name,self.last_name,self.age,self.phone))

	def greet_user(self):
		print('尊敬的%s,恭喜你中了五百万。'%self.first_name)

	def increment_login_attemptss(self):
		self.login_attempts += 1
		print('当前登录次数%d'%self.login_attempts)

	def reset_login_attempts(self):
        self.login_attempts = 0
        print('当前登录次数%d' % self.login_attempts)

if __name__ == '__main__':

    joe = User('joe','black',19,'男','18600009999')
    joe.describe_user()
    joe.greet_user()

    joe.increment_login_attempts()
    joe.increment_login_attempts()
    joe.increment_login_attempts()

    joe.reset_login_attempts()

猜你喜欢

转载自blog.csdn.net/weixin_43895902/article/details/97290383
今日推荐